Fix race condition in leaving rooms #74
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Hi team!
This is a quick small PR to address an error that we are seeing more and more often recently. The error looks like this:
It looks like we are checking the room exists in the rooms Map, and if it does, we proceed to do a few things. But when multiple sockets are removed from a room independently, then this is causing a race condition on this line:
https://github.com/socketio/socket.io-adapter/blob/master/lib/index.ts#L91
This PR addresses this by,
.get
on the Map exactly once.delete-room
even if the deletion actually happened.However, I'm a bit skeptical of this as well. While I believe this is the underlying reason for this error, I don't hard evidence to prove it, other than staring at the code really hard and coming up with a scenario where the error happens.
So, if you've already seen this error in the past, any advice would be much appreciated. I tried searching the repository for this error message but couldn't find anything relevant.
Thank you very much for your time, and of course, for your work on socket.io! 🚀