in src/sync/mpsc.rs [470:483]
fn drop(&mut self) {
if ExecutionState::should_stop() {
return;
}
let mut state = self.inner.state.borrow_mut();
assert!(state.known_senders > 0);
state.known_senders -= 1;
if state.known_senders == 0 {
// Last sender was dropped; wake up any receivers
for &tid in state.waiting_receivers.iter() {
ExecutionState::with(|s| s.get_mut(tid).unblock());
}
}
}