@@ -50,25 +50,28 @@ pub fn validate_vcpu_signal_num(num: c_int) -> io::Result<c_int> {
5050 }
5151}
5252
53- /// Registers `handler` as the vCPU's signal handler of signum `num `.
53+ /// Registers `handler` as the vCPU's signal handler of `signum `.
5454///
5555/// This is considered unsafe because the given handler will be called asynchronously, interrupting
5656/// whatever the thread was doing and therefore must only do async-signal-safe operations.
57- pub unsafe fn register_vcpu_signal_handler ( num : i32 , handler : SignalHandler ) -> io:: Result < ( ) > {
58- let num = validate_vcpu_signal_num ( num) ?;
57+ pub unsafe fn register_vcpu_signal_handler (
58+ signum : c_int ,
59+ handler : SignalHandler ,
60+ ) -> io:: Result < ( ) > {
61+ let num = validate_vcpu_signal_num ( signum) ?;
5962 // Safe, because this is a POD struct.
6063 let mut sigact: sigaction = mem:: zeroed ( ) ;
6164 sigact. sa_flags = libc:: SA_SIGINFO ;
6265 sigact. sa_sigaction = handler as usize ;
6366 SyscallReturnCode ( sigaction ( num, & sigact, null_mut ( ) ) ) . into_empty_result ( )
6467}
6568
66- /// Registers the specified signal handler for `SIGSYS `.
67- pub fn register_sigsys_handler ( sigsys_handler : SignalHandler ) -> Result < ( ) , io:: Error > {
69+ /// Registers `handler` as the process' signal handler of `signum `.
70+ pub fn register_signal_handler ( signum : c_int , handler : SignalHandler ) -> Result < ( ) , io:: Error > {
6871 // Safe, because this is a POD struct.
6972 let mut sigact: sigaction = unsafe { mem:: zeroed ( ) } ;
7073 sigact. sa_flags = libc:: SA_SIGINFO ;
71- sigact. sa_sigaction = sigsys_handler as usize ;
74+ sigact. sa_sigaction = handler as usize ;
7275
7376 // We set all the bits of sa_mask, so all signals are blocked on the current thread while the
7477 // SIGSYS handler is executing. Safe because the parameter is valid and we check the return
@@ -78,7 +81,7 @@ pub fn register_sigsys_handler(sigsys_handler: SignalHandler) -> Result<(), io::
7881 }
7982
8083 // Safe because the parameters are valid and we check the return value.
81- unsafe { SyscallReturnCode ( sigaction ( libc :: SIGSYS , & sigact, null_mut ( ) ) ) . into_empty_result ( ) }
84+ unsafe { SyscallReturnCode ( sigaction ( signum , & sigact, null_mut ( ) ) ) . into_empty_result ( ) }
8285}
8386
8487/// Trait for threads that can be signalled via `pthread_kill`.
@@ -116,6 +119,8 @@ mod tests {
116119 use std:: thread;
117120 use std:: time:: Duration ;
118121
122+ use libc:: SIGSYS ;
123+
119124 static mut SIGNAL_HANDLER_CALLED : bool = false ;
120125
121126 extern "C" fn handle_signal ( _: c_int , _: * mut siginfo_t , _: * mut c_void ) {
@@ -130,7 +135,7 @@ mod tests {
130135 // testing bad value
131136 assert ! ( register_vcpu_signal_handler( SIGRTMAX ( ) , handle_signal) . is_err( ) ) ;
132137 assert ! ( register_vcpu_signal_handler( 0 , handle_signal) . is_ok( ) ) ;
133- assert ! ( register_sigsys_handler ( handle_signal) . is_ok( ) ) ;
138+ assert ! ( register_signal_handler ( SIGSYS , handle_signal) . is_ok( ) ) ;
134139 }
135140 }
136141
0 commit comments