webtorrent / webtorrent

⚡️ Streaming torrent client for the web

Home Page:https://webtorrent.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

`add` and `remove` are not async safe

uriva opened this issue · comments

What version of this package are you using?
^2.1.27

What operating system, Node.js, and npm version?

ubuntu 23.4
v19.0.0
8.19.2

What happened?
It's possible to get add and remove to throw if calling them in parallel, even with different hash ids.

What did you expect to happen?

remove should not throw if it can't find the torrent.

add should not throw if the torrent is already added.

Are you willing to submit a pull request to fix this bug?
yes

commented

those are async functions, you simply need to run

await client.add()

and

await client.remove()

consider the case where add is called from different places in the code. If there is an sync context switch inside add, then we can be inside it twice.

await is not equivalent to a lock.

commented

fair

while we're at it, these functions should probably not have a cb parameter and be async at the same time.

commented

they should be, but not as a part of this issue

this was planned for ages: https://github.com/orgs/webtorrent/projects/1#card-60702582

they became async because other issues were being blocked by it, and using .then would be useless if it was later re-written to await anyways, and dropping callback based calls for webtorrent, means doing it inside close to 20 packages, which requries a lot of testing and rewriting

Is this still relevant? If so, what is blocking it? Is there anything you can do to help move it forward?