From ef8c120533b941399c55f3ac5871a8324ed90897 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Sun, 23 Jul 2017 16:02:48 -0600 Subject: [PATCH] Prevent nested signals, fix check for PID > 0 --- src/context/switch.rs | 8 ++++++-- src/syscall/process.rs | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/context/switch.rs b/src/context/switch.rs index 3c0567b..54f1880 100644 --- a/src/context/switch.rs +++ b/src/context/switch.rs @@ -98,7 +98,9 @@ pub unsafe fn switch() -> bool { let mut context = context_lock.write(); if check_context(&mut context) { to_ptr = context.deref_mut() as *mut Context; - to_sig = context.pending.pop_front(); + if (&mut *to_ptr).ksig.is_none() { + to_sig = context.pending.pop_front(); + } break; } } @@ -110,7 +112,9 @@ pub unsafe fn switch() -> bool { let mut context = context_lock.write(); if check_context(&mut context) { to_ptr = context.deref_mut() as *mut Context; - to_sig = context.pending.pop_front(); + if (&mut *to_ptr).ksig.is_none() { + to_sig = context.pending.pop_front(); + } break; } } diff --git a/src/syscall/process.rs b/src/syscall/process.rs index aceeaaa..c0c0e96 100644 --- a/src/syscall/process.rs +++ b/src/syscall/process.rs @@ -1041,7 +1041,7 @@ pub fn kill(pid: ContextId, sig: usize) -> Result { } }; - if pid.into() > 0 { + if pid.into() as isize > 0 { // Send to a single process if let Some(context_lock) = contexts.get(pid) { let mut context = context_lock.write();