Vine: Fix Crash After Idle Disconnect #4065
Merged
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.
Proposed Changes
@btovar observed a problem in which the manager crashes after processing an
idle-disconnect
message and disconnecting the worker. The problem is that this invalidates thevine_worker_info
object and thelink
object in the middle ofhandle_worker
. If theidle-disconnect
is followed by any other asynchronous message (which is likely) then the manager ends up seeing messages from a worker that no longer exists.The solution here is to eliminate the special case:
handle_idle_disconnect
now sends anexit
message to a worker, but does not disconnect it immediately. This allows the manager to process any following asynchronous messages, and the worker can perform whatever cleanup and communication it needs to do before disconnecting. And then the disconnect will be handled in the single (normal) place when the connection is dropped.@colinthomas-z80 the crash was occurring in the recently-modified location of
link_poll_active_workers
but really the problem was deeper in that we shouldn't be invalidating the worker object in multiple places.Merge Checklist
The following items must be completed before PRs can be merged.
Check these off to verify you have completed all steps.
make test
Run local tests prior to pushing.make format
Format source code to comply with lint policies. Note that some lint errors can only be resolved manually (e.g., Python)make lint
Run lint on source code prior to pushing.