vuejs / language-tools

⚡ High-performance Vue language tooling based-on Volar.js
https://marketplace.visualstudio.com/items?itemName=Vue.volar
MIT License
5.87k stars 403 forks source link

[Vue Named Pipe Client] crashes trying to delete pipe from another user #4919

Open ehoogeveen-medweb opened 1 month ago

ehoogeveen-medweb commented 1 month ago

Vue - Official extension or vue-tsc version

v2.1.6

VSCode version

1.9.4

Vue version

3.5.11

TypeScript version

5.6.2

System Info

System:
    OS: Linux 5.14 AlmaLinux 9.4 (Seafoam Ocelot)
    CPU: (4) x64 Intel(R) Xeon(R) Gold 6242R CPU @ 3.10GHz
    Memory: 15.68 GB / 31.09 GB
    Container: Yes
    Shell: 5.1.8 - /bin/bash
  Binaries:
    Node: 20.18.0 - /home/notes/.nvm/versions/node/v20.18.0/bin/node
    Yarn: 1.22.22 - /home/notes/.nvm/versions/node/v20.18.0/bin/yarn
    npm: 10.9.0 - /home/notes/.nvm/versions/node/v20.18.0/bin/npm
    pnpm: 9.12.1 - /home/notes/.nvm/versions/node/v20.18.0/bin/pnpm

Steps to reproduce

We have multiple developers accessing the same system via a remote connection. When multiple developers use the Vue extension, it appears to create named pipes under /tmp, e.g. /tmp/vue-named-pipe-2.1.6-inferred-1. These pipes are owned by different users and may be active at the same time (as the VSCode server processes stay active even if we disconnect).

What is expected?

No crash.

What is actually happening?

The extension crashes multiple times in a row, trying to delete pipes belonging to other users. Output:

[Vue Named Pipe Client] Deleting: /tmp/vue-named-pipe-2.1.6-inferred-1
[Vue Named Pipe Client] Deleting: /tmp/vue-named-pipe-2.1.6-configured-2
[Vue Named Pipe Client] Deleting: /tmp/vue-named-pipe-2.1.6-inferred-2
[Vue Named Pipe Client] Deleting: /tmp/vue-named-pipe-2.1.6-configured-3
[Vue Named Pipe Client] Deleting: /tmp/vue-named-pipe-2.1.6-inferred-3
[Vue Named Pipe Client] Deleting: /tmp/vue-named-pipe-2.1.6-configured-4
[Vue Named Pipe Client] Deleting: /tmp/vue-named-pipe-2.1.6-inferred-4
[Vue Named Pipe Client] Deleting: /tmp/vue-named-pipe-2.1.6-configured-5
[Vue Named Pipe Client] Deleting: /tmp/vue-named-pipe-2.1.6-configured-6
[Vue Named Pipe Client] Deleting: /tmp/vue-named-pipe-2.1.6-inferred-6
[Vue Named Pipe Client] Deleting: /tmp/vue-named-pipe-2.1.6-configured-7
[Vue Named Pipe Client] Deleting: /tmp/vue-named-pipe-2.1.6-inferred-7
[Vue Named Pipe Client] Deleting: /tmp/vue-named-pipe-2.1.6-inferred-8
[Vue Named Pipe Client] Deleting: /tmp/vue-named-pipe-2.1.6-configured-10
[Vue Named Pipe Client] Deleting: /tmp/vue-named-pipe-2.1.6-inferred-10
[Vue Named Pipe Client] Deleting: /tmp/vue-named-pipe-2.1.6-inferred-11
[Vue Named Pipe Client] Deleting: /tmp/vue-named-pipe-2.1.6-configured-13
[Vue Named Pipe Client] Deleting: /tmp/vue-named-pipe-2.1.6-configured-14
[Vue Named Pipe Client] Deleting: /tmp/vue-named-pipe-2.1.6-configured-15
[Vue Named Pipe Client] Deleting: /tmp/vue-named-pipe-2.1.6-configured-16
node:internal/fs/promises:1075
  return await PromisePrototypeThen(
         ^

Error: EPERM: operation not permitted, unlink '/tmp/vue-named-pipe-2.1.6-inferred-1'
    at async Object.unlink (node:internal/fs/promises:1075:10) {
  errno: -1,
  code: 'EPERM',
  syscall: 'unlink',
  path: '/tmp/vue-named-pipe-2.1.6-inferred-1'
}

In this case, /tmp/vue-named-pipe-2.1.6-inferred-1 is owned by one of my colleagues.

Link to minimal reproduction

No response

Any additional comments?

I'm not sure when this started happening, as I've been on holiday and haven't touched our Vue code in a while, but I think it's a recent regression.