diff --git a/tokio-sync/src/oneshot.rs b/tokio-sync/src/oneshot.rs index 04401b9fc..8ed1672fc 100644 --- a/tokio-sync/src/oneshot.rs +++ b/tokio-sync/src/oneshot.rs @@ -171,6 +171,8 @@ impl Sender { state = State::unset_tx_task(&inner.state); if state.is_closed() { + // Set the flag again so that the waker is released in drop + State::set_tx_task(&inner.state); return Ready(()); } else { unsafe { inner.drop_tx_task() }; @@ -359,6 +361,9 @@ impl Inner { // Unset the task state = State::unset_rx_task(&self.state); if state.is_complete() { + // Set the flag again so that the waker is released in drop + State::set_rx_task(&self.state); + return match unsafe { self.consume_value() } { Some(value) => Ready(Ok(value)), None => Ready(Err(RecvError(()))),