Add tests for aborted Pool::acquire and Semaphore::acquire calls showing a memory leak #3
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.
I wanted to show the reason for the deadlock I reported in #2 but found a memory leak instead.
A aborted
Semaphore::acquire
does leave the waker behind in the queue which causes the memory to grow indefinitely.The thing I don't understand: I wanted to show that the aborted task A leaves a waker for itself in the queue and when the permit is returned task A is woken instead of task B thus causing the code to deadlock. This does not happen. Instead I found that calling
waker.wake()
for task A actually wakes task B.I'm trying to wrap my head around why it works that way and doesn't deadlock. Whatever the reason for that behavior is. It's a memory leak nonetheless.