Skip to content

Commit

Permalink
Fix blocking of multiple signals per pipe
Browse files Browse the repository at this point in the history
- Also update the example test application to catch a similar error on
  execution.
  • Loading branch information
ftilde authored and BurntSushi committed Jul 19, 2017
1 parent 8207219 commit 1acd861
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 6 deletions.
4 changes: 3 additions & 1 deletion examples/test_block_specific.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@ use chan_signal::{Signal, kill_this};

fn main() {
chan_signal::unblock_signals_by_default();
let r_usr1 = chan_signal::notify(&[Signal::USR1]);
let r_usr1 = chan_signal::notify(&[Signal::USR1, Signal::ALRM]);
kill_this(Signal::USR1);
kill_this(Signal::ALRM);
assert_eq!(r_usr1.recv(), Some(Signal::USR1));
assert_eq!(r_usr1.recv(), Some(Signal::ALRM));

let (s, r_usr2) = chan::sync(1);
chan_signal::notify_on(&s, Signal::USR2);
Expand Down
11 changes: 6 additions & 5 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -203,12 +203,13 @@ pub fn notify_on(chan: &Sender<Signal>, signal: Signal) {
let mut sigs = BitSet::new();
sigs.insert(signal.as_sig() as usize);
subs.insert((*chan).clone(), sigs);

// Make sure that the signal that we want notifications on is blocked
let mut sig_set = SigSet::empty();
sig_set.add(signal.as_sig()).unwrap();
sig_set.thread_block_signals().unwrap();
}

// Make sure that the signal that we want notifications on is blocked
// It does not matter if we unblock the same signal twice.
let mut sig_set = SigSet::empty();
sig_set.add(signal.as_sig()).unwrap();
sig_set.thread_block_signals().unwrap();
}

/// Unblock all subscribable signals that are blocked by default.
Expand Down

0 comments on commit 1acd861

Please sign in to comment.