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.
There are two issues with the shutdown logic:
Close()
is called before theeventLoop
is scheduled, theWaitGroup
counter is still 0 andClose
does not wait for theeventLoop
to finish. That's a race conditionClose()
is called more than once, it panics, as the code tries to write to a closed channel. It is generally good practice to makeClose
idempotent, to allow thedefer x.Close(); /* … */ return x.Close()
idiom, which is a convenient way to guarantee both thatClose
is called and that the error is checked.This commit fixes both and factors the shutdown logic into a new type for readability and ease of understanding.