File tree Expand file tree Collapse file tree 3 files changed +31
-4
lines changed Expand file tree Collapse file tree 3 files changed +31
-4
lines changed Original file line number Diff line number Diff line change @@ -6,7 +6,7 @@ refs/heads/try: d324a424d8f84b1eb049b12cf34182bda91b0024
6
6
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
7
7
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8
8
refs/heads/try2: d0c6ce338884ee21843f4b40bf6bf18d222ce5df
9
- refs/heads/incoming: 7634e2911b6cedd7d06bbfd716922c4a750b47ae
9
+ refs/heads/incoming: d2e9d99f819e04d32fe8f87dab9e3b318075cf26
10
10
refs/heads/dist-snap: 2f32a1581f522e524009138b33b1c7049ced668d
11
11
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
12
12
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503
Original file line number Diff line number Diff line change @@ -530,16 +530,20 @@ fn sender_terminate<T: send>(p: *packet<T>) {
530
530
#[ doc( hidden) ]
531
531
fn receiver_terminate < T : send > ( p : * packet < T > ) {
532
532
let p = unsafe { & * p } ;
533
- assert p. header . blocked_task . is_null ( ) ;
534
533
match swap_state_rel ( p. header . state , terminated) {
535
534
empty => {
535
+ assert p. header . blocked_task . is_null ( ) ;
536
536
// the sender will clean up
537
537
}
538
538
blocked => {
539
- // this shouldn't happen.
540
- fail ~"terminating a blocked packet"
539
+ let old_task = swap_task ( p. header . blocked_task , ptr:: null ( ) ) ;
540
+ if !old_task. is_null ( ) {
541
+ rustrt:: rust_task_deref ( old_task) ;
542
+ assert old_task == rustrt:: rust_get_task ( ) ;
543
+ }
541
544
}
542
545
terminated | full => {
546
+ assert p. header . blocked_task . is_null ( ) ;
543
547
// I have to clean up, use drop_glue
544
548
}
545
549
}
Original file line number Diff line number Diff line change
1
+ import pipes:: { select2, selectable} ;
2
+
3
+ fn main ( ) {
4
+ let ( c, p) = pipes:: stream ( ) ;
5
+ do task:: try {
6
+ let ( c2, p2) = pipes:: stream ( ) ;
7
+ do task:: spawn {
8
+ p2. recv ( ) ;
9
+ #error[ "brother fails" ] ;
10
+ fail;
11
+ }
12
+ let ( c3, p3) = pipes:: stream ( ) ;
13
+ c. send ( c3) ;
14
+ c2. send ( ( ) ) ;
15
+ #error[ "child blocks" ] ;
16
+ let ( c, p) = pipes:: stream ( ) ;
17
+ ( p, p3) . select ( ) ;
18
+ c. send ( ( ) ) ;
19
+ } ;
20
+ #error[ "parent tries" ] ;
21
+ assert !p. recv ( ) . try_send ( ( ) ) ;
22
+ #error ( "all done!" ) ;
23
+ }
You can’t perform that action at this time.
0 commit comments