Skip to content
Merged
Changes from 1 commit
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
1b17926
Initial signal support
palaviv Jul 28, 2019
5b670f8
Simplify signal code
palaviv Jul 29, 2019
f540d31
Move static triggers array to signal.rs
palaviv Jul 29, 2019
ca23c43
Return previous handler from signal
palaviv Jul 29, 2019
57cdae1
Add signal.getsignal
palaviv Jul 29, 2019
a7d96b7
Use rust signal module directly
palaviv Jul 29, 2019
e8001d7
Add signal.alarm
palaviv Jul 29, 2019
c1e0799
Add test for signal
palaviv Jul 29, 2019
7061f1c
Add signal.{SIG_IGN, SIG_DFL}
palaviv Jul 31, 2019
a1af6b4
Iterate over triggers in check_sginals
palaviv Jul 31, 2019
56b555b
Add signal numbers
palaviv Jul 31, 2019
785b5d8
Improve signal test
palaviv Jul 31, 2019
61bf076
User arr_macro to create triggers array
palaviv Jul 31, 2019
9470d75
Compile nix parts only on unix
palaviv Jul 31, 2019
48da527
Test signal only on unix
palaviv Jul 31, 2019
f3b4b28
SIGINT not defined on windows
palaviv Aug 2, 2019
7cd5e89
Get SIG_IGN
palaviv Aug 2, 2019
52d204c
Fix clippy warnings
palaviv Aug 2, 2019
60b5d9d
Add empty check_signals on WASM
palaviv Aug 2, 2019
25b9f35
Fix more clippy warnings
palaviv Aug 2, 2019
3e07d61
Add vm to WASM check_sginals
palaviv Aug 2, 2019
075f2c9
Use libc directly to set signal
palaviv Aug 3, 2019
23cba40
Get signal numbers from libc
palaviv Aug 3, 2019
f24c6da
Add some windows test to signal
palaviv Aug 3, 2019
f600868
Define SIG_* on windows
palaviv Aug 3, 2019
c5486a6
Remove stub check_signals in WASM
palaviv Aug 3, 2019
5e5d46d
Remove os_set_signal
palaviv Aug 3, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Iterate over triggers in check_sginals
  • Loading branch information
palaviv committed Aug 2, 2019
commit a1af6b4d6c326193c18e193e65311ac1c441c109
15 changes: 9 additions & 6 deletions vm/src/stdlib/signal.rs
Original file line number Diff line number Diff line change
Expand Up @@ -91,13 +91,16 @@ fn alarm(time: PyIntRef, _vm: &VirtualMachine) -> u32 {
}

pub fn check_signals(vm: &VirtualMachine) {
for (signum, handler) in vm.signal_handlers.borrow().iter() {
if *signum as usize >= NSIG {
panic!("Signum bigger then NSIG");
}
let triggerd = unsafe { TRIGGERS[*signum as usize].swap(false, Ordering::Relaxed) };
for signum in 1..NSIG {
let triggerd = unsafe { TRIGGERS[signum].swap(false, Ordering::Relaxed) };
if triggerd {
vm.invoke(handler.clone(), vec![vm.new_int(*signum), vm.get_none()])
let handler = vm
.signal_handlers
.borrow()
.get(&(signum as i32))
.expect("Handler should be set")
.clone();
vm.invoke(handler, vec![vm.new_int(signum), vm.get_none()])
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What should happen when a signal handler throws an exception? Do you want to tackle this now, or implement it later?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would prefer to do it later

.expect("Test");
}
}
Expand Down