From d07e537fc3daaf73b7baf652e13ee2d36706258e Mon Sep 17 00:00:00 2001 From: Eric Holk Date: Mon, 9 Jul 2012 16:57:47 -0700 Subject: Remember to wake up blocked task on sender terminate. --- src/libcore/pipes.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'src/libcore') diff --git a/src/libcore/pipes.rs b/src/libcore/pipes.rs index 6f61b12ab40..441f323d7bf 100644 --- a/src/libcore/pipes.rs +++ b/src/libcore/pipes.rs @@ -156,7 +156,16 @@ fn peek(p: recv_packet) -> bool { fn sender_terminate(p: *packet) { let p = unsafe { uniquify(p) }; alt swap_state_rel(p.header.state, terminated) { - empty | blocked { + empty { + // The receiver will eventually clean up. + unsafe { forget(p) } + } + blocked { + // wake up the target + let target = p.header.blocked_task.get(); + rustrt::task_signal_event(target, + ptr::addr_of(p.header) as *libc::c_void); + // The receiver will eventually clean up. unsafe { forget(p) } } -- cgit 1.4.1-3-g733a5