File tree Expand file tree Collapse file tree 3 files changed +11
-5
lines changed Expand file tree Collapse file tree 3 files changed +11
-5
lines changed Original file line number Diff line number Diff line change 1
1
---
2
2
refs/heads/master: e430a699f2c60890d9b86069fd0c68a70ece7120
3
3
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
4
- refs/heads/snap-stage3: 0229bc4defdaa6bad77269204279ed1a37b3aa9f
4
+ refs/heads/snap-stage3: 47cca22d5455d2d60226ead907fd627784701ef5
5
5
refs/heads/try: ffbe0e0e00374358b789b0037bcb3a577cd218be
6
6
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
7
7
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
Original file line number Diff line number Diff line change @@ -1473,9 +1473,13 @@ extern mod rustrt {
1473
1473
1474
1474
fn rust_task_is_unwinding( task: * rust_task) -> bool ;
1475
1475
fn rust_osmain_sched_id( ) -> sched_id;
1476
+ #[ rust_stack]
1476
1477
fn rust_task_inhibit_kill( t: * rust_task) ;
1478
+ #[ rust_stack]
1477
1479
fn rust_task_allow_kill( t: * rust_task) ;
1480
+ #[ rust_stack]
1478
1481
fn rust_task_inhibit_yield( t: * rust_task) ;
1482
+ #[ rust_stack]
1479
1483
fn rust_task_allow_yield( t: * rust_task) ;
1480
1484
fn rust_task_kill_other( task: * rust_task) ;
1481
1485
fn rust_task_kill_all( task: * rust_task) ;
Original file line number Diff line number Diff line change @@ -631,27 +631,29 @@ rust_task::on_rust_stack() {
631
631
}
632
632
}
633
633
634
+ // NB: In inhibit_kill and allow_kill, helgrind would complain that we need to
635
+ // hold lifecycle_lock while accessing disallow_kill. Even though another
636
+ // killing task may access disallow_kill concurrently, this is not racy
637
+ // because the killer only cares if this task is blocking, and block() already
638
+ // uses proper locking. See https://github.com/mozilla/rust/issues/3213 .
639
+
634
640
void
635
641
rust_task::inhibit_kill () {
636
- scoped_lock with (lifecycle_lock);
637
642
// Here might be good, though not mandatory, to check if we have to die.
638
643
disallow_kill++;
639
644
}
640
645
641
646
void
642
647
rust_task::allow_kill () {
643
- scoped_lock with (lifecycle_lock);
644
648
assert (disallow_kill > 0 && " Illegal allow_kill(): already killable!" );
645
649
disallow_kill--;
646
650
}
647
651
648
652
void rust_task::inhibit_yield () {
649
- scoped_lock with (lifecycle_lock);
650
653
disallow_yield++;
651
654
}
652
655
653
656
void rust_task::allow_yield () {
654
- scoped_lock with (lifecycle_lock);
655
657
assert (disallow_yield > 0 && " Illegal allow_yield(): already yieldable!" );
656
658
disallow_yield--;
657
659
}
You can’t perform that action at this time.
0 commit comments