fix "resource has children" trap due to undropped pollables #63
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.
Previously, it was possible to drop an
input-stream,output-stream, orfuture-incoming-responsewhile it still had an undropped childpollablegiven thatspin-executorprovided no way to cancel apollablepreviously registered usingpush_waker. In addition, it was possible to unintentionally register more than one pollable for such a resource concurrently.This commit adds a
CancelTokenreturn value topush_waker, which may be used to explicitly cancel the registration and immediately drop thepollable. We now use that, along withCancelOnDropToken, to ensure that we cancel any previous registration before creating a new one, as well as guarantee that the registration is cancelled before attempting to drop the parent resource.