diff options
author | Matt Mastracci <matthew@mastracci.com> | 2023-06-29 10:01:54 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-29 16:01:54 +0000 |
commit | 98df69fd4cbe3687e2ff3519fbd6bff4e5f3101f (patch) | |
tree | 0c959f6b987f0398c29d7048ab1ec3f0734877cb /ext/web/blob.rs | |
parent | 93b3ff017078b2c1e993457ef43af6b52e715ba6 (diff) |
fix(core): Ensure we don't lose the waker when polling an empty JoinSet (#19655)
This is a reproduction and fix for a very obscure bug where the Deno
runtime locks up we end up polling an empty JoinSet and attempt to
resolve ops after-the-fact. There's a small footgun in the JoinSet API
where polling it while empty returns Ready(None), which means that it
never holds on to the waker. This means that if we aren't testing for
this particular return value and don't stash the waker ourselves for a
future async op to eventually queue, we can end up losing the waker
entirely and the op wakes up, notifies tokio, which notifies the
JoinSet, which then has nobody to notify 😢.
Co-authored-by: Luca Casonato <hello@lcas.dev>
Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
Diffstat (limited to 'ext/web/blob.rs')
0 files changed, 0 insertions, 0 deletions