@@ -833,6 +833,7 @@ mod sigevent {
833
833
834
834
#[ cfg( test) ]
835
835
mod tests {
836
+ use std:: thread;
836
837
use super :: * ;
837
838
838
839
#[ test]
@@ -894,104 +895,120 @@ mod tests {
894
895
895
896
#[ test]
896
897
fn test_thread_signal_set_mask ( ) {
897
- let prev_mask = SigSet :: thread_get_mask ( ) . expect ( "Failed to get existing signal mask!" ) ;
898
+ thread:: spawn ( || {
899
+ let prev_mask = SigSet :: thread_get_mask ( )
900
+ . expect ( "Failed to get existing signal mask!" ) ;
898
901
899
- let mut test_mask = prev_mask;
900
- test_mask. add ( SIGUSR1 ) ;
902
+ let mut test_mask = prev_mask;
903
+ test_mask. add ( SIGUSR1 ) ;
901
904
902
- assert ! ( test_mask. thread_set_mask( ) . is_ok( ) ) ;
903
- let new_mask = SigSet :: thread_get_mask ( ) . expect ( "Failed to get new mask!" ) ;
905
+ assert ! ( test_mask. thread_set_mask( ) . is_ok( ) ) ;
906
+ let new_mask = SigSet :: thread_get_mask ( )
907
+ . expect ( "Failed to get new mask!" ) ;
904
908
905
- assert ! ( new_mask. contains( SIGUSR1 ) ) ;
906
- assert ! ( !new_mask. contains( SIGUSR2 ) ) ;
909
+ assert ! ( new_mask. contains( SIGUSR1 ) ) ;
910
+ assert ! ( !new_mask. contains( SIGUSR2 ) ) ;
907
911
908
- prev_mask. thread_set_mask ( ) . expect ( "Failed to revert signal mask!" ) ;
912
+ prev_mask. thread_set_mask ( ) . expect ( "Failed to revert signal mask!" ) ;
913
+ } ) . join ( ) . unwrap ( ) ;
909
914
}
910
915
911
916
#[ test]
912
917
fn test_thread_signal_block ( ) {
913
- let mut mask = SigSet :: empty ( ) ;
914
- mask. add ( SIGUSR1 ) ;
918
+ thread:: spawn ( || {
919
+ let mut mask = SigSet :: empty ( ) ;
920
+ mask. add ( SIGUSR1 ) ;
915
921
916
- assert ! ( mask. thread_block( ) . is_ok( ) ) ;
922
+ assert ! ( mask. thread_block( ) . is_ok( ) ) ;
917
923
918
- assert ! ( SigSet :: thread_get_mask( ) . unwrap( ) . contains( SIGUSR1 ) ) ;
924
+ assert ! ( SigSet :: thread_get_mask( ) . unwrap( ) . contains( SIGUSR1 ) ) ;
925
+ } ) . join ( ) . unwrap ( ) ;
919
926
}
920
927
921
928
#[ test]
922
929
fn test_thread_signal_unblock ( ) {
923
- let mut mask = SigSet :: empty ( ) ;
924
- mask. add ( SIGUSR1 ) ;
930
+ thread:: spawn ( || {
931
+ let mut mask = SigSet :: empty ( ) ;
932
+ mask. add ( SIGUSR1 ) ;
925
933
926
- assert ! ( mask. thread_unblock( ) . is_ok( ) ) ;
934
+ assert ! ( mask. thread_unblock( ) . is_ok( ) ) ;
927
935
928
- assert ! ( !SigSet :: thread_get_mask( ) . unwrap( ) . contains( SIGUSR1 ) ) ;
936
+ assert ! ( !SigSet :: thread_get_mask( ) . unwrap( ) . contains( SIGUSR1 ) ) ;
937
+ } ) . join ( ) . unwrap ( ) ;
929
938
}
930
939
931
940
#[ test]
932
941
fn test_thread_signal_swap ( ) {
933
- let mut mask = SigSet :: empty ( ) ;
934
- mask. add ( SIGUSR1 ) ;
935
- mask. thread_block ( ) . unwrap ( ) ;
942
+ thread:: spawn ( || {
943
+ let mut mask = SigSet :: empty ( ) ;
944
+ mask. add ( SIGUSR1 ) ;
945
+ mask. thread_block ( ) . unwrap ( ) ;
936
946
937
- assert ! ( SigSet :: thread_get_mask( ) . unwrap( ) . contains( SIGUSR1 ) ) ;
947
+ assert ! ( SigSet :: thread_get_mask( ) . unwrap( ) . contains( SIGUSR1 ) ) ;
938
948
939
- let mut mask2 = SigSet :: empty ( ) ;
940
- mask2. add ( SIGUSR2 ) ;
949
+ let mut mask2 = SigSet :: empty ( ) ;
950
+ mask2. add ( SIGUSR2 ) ;
941
951
942
- let oldmask = mask2. thread_swap_mask ( SigmaskHow :: SIG_SETMASK ) . unwrap ( ) ;
952
+ let oldmask = mask2. thread_swap_mask ( SigmaskHow :: SIG_SETMASK )
953
+ . unwrap ( ) ;
943
954
944
- assert ! ( oldmask. contains( SIGUSR1 ) ) ;
945
- assert ! ( !oldmask. contains( SIGUSR2 ) ) ;
955
+ assert ! ( oldmask. contains( SIGUSR1 ) ) ;
956
+ assert ! ( !oldmask. contains( SIGUSR2 ) ) ;
946
957
947
- assert ! ( SigSet :: thread_get_mask( ) . unwrap( ) . contains( SIGUSR2 ) ) ;
958
+ assert ! ( SigSet :: thread_get_mask( ) . unwrap( ) . contains( SIGUSR2 ) ) ;
959
+ } ) . join ( ) . unwrap ( ) ;
948
960
}
949
961
950
962
#[ test]
951
963
fn test_sigaction ( ) {
952
964
use libc;
965
+ thread:: spawn ( || {
966
+ extern fn test_sigaction_handler ( _: libc:: c_int ) { }
967
+ extern fn test_sigaction_action ( _: libc:: c_int ,
968
+ _: * mut libc:: siginfo_t , _: * mut libc:: c_void ) { }
953
969
954
- extern fn test_sigaction_handler ( _: libc:: c_int ) { }
955
- extern fn test_sigaction_action ( _: libc:: c_int ,
956
- _: * mut libc:: siginfo_t , _: * mut libc:: c_void ) { }
957
-
958
- let handler_sig = SigHandler :: Handler ( test_sigaction_handler) ;
970
+ let handler_sig = SigHandler :: Handler ( test_sigaction_handler) ;
959
971
960
- let flags = SaFlags :: SA_ONSTACK | SaFlags :: SA_RESTART | SaFlags :: SA_SIGINFO ;
972
+ let flags = SaFlags :: SA_ONSTACK | SaFlags :: SA_RESTART |
973
+ SaFlags :: SA_SIGINFO ;
961
974
962
- let mut mask = SigSet :: empty ( ) ;
963
- mask. add ( SIGUSR1 ) ;
975
+ let mut mask = SigSet :: empty ( ) ;
976
+ mask. add ( SIGUSR1 ) ;
964
977
965
- let action_sig = SigAction :: new ( handler_sig, flags, mask) ;
978
+ let action_sig = SigAction :: new ( handler_sig, flags, mask) ;
966
979
967
- assert_eq ! ( action_sig. flags( ) , SaFlags :: SA_ONSTACK | SaFlags :: SA_RESTART ) ;
968
- assert_eq ! ( action_sig. handler( ) , handler_sig) ;
980
+ assert_eq ! ( action_sig. flags( ) ,
981
+ SaFlags :: SA_ONSTACK | SaFlags :: SA_RESTART ) ;
982
+ assert_eq ! ( action_sig. handler( ) , handler_sig) ;
969
983
970
- mask = action_sig. mask ( ) ;
971
- assert ! ( mask. contains( SIGUSR1 ) ) ;
972
- assert ! ( !mask. contains( SIGUSR2 ) ) ;
984
+ mask = action_sig. mask ( ) ;
985
+ assert ! ( mask. contains( SIGUSR1 ) ) ;
986
+ assert ! ( !mask. contains( SIGUSR2 ) ) ;
973
987
974
- let handler_act = SigHandler :: SigAction ( test_sigaction_action) ;
975
- let action_act = SigAction :: new ( handler_act, flags, mask) ;
976
- assert_eq ! ( action_act. handler( ) , handler_act) ;
988
+ let handler_act = SigHandler :: SigAction ( test_sigaction_action) ;
989
+ let action_act = SigAction :: new ( handler_act, flags, mask) ;
990
+ assert_eq ! ( action_act. handler( ) , handler_act) ;
977
991
978
- let action_dfl = SigAction :: new ( SigHandler :: SigDfl , flags, mask) ;
979
- assert_eq ! ( action_dfl. handler( ) , SigHandler :: SigDfl ) ;
992
+ let action_dfl = SigAction :: new ( SigHandler :: SigDfl , flags, mask) ;
993
+ assert_eq ! ( action_dfl. handler( ) , SigHandler :: SigDfl ) ;
980
994
981
- let action_ign = SigAction :: new ( SigHandler :: SigIgn , flags, mask) ;
982
- assert_eq ! ( action_ign. handler( ) , SigHandler :: SigIgn ) ;
995
+ let action_ign = SigAction :: new ( SigHandler :: SigIgn , flags, mask) ;
996
+ assert_eq ! ( action_ign. handler( ) , SigHandler :: SigIgn ) ;
997
+ } ) . join ( ) . unwrap ( ) ;
983
998
}
984
999
985
1000
// TODO(#251): Re-enable after figuring out flakiness.
986
1001
#[ cfg( not( any( target_os = "macos" , target_os = "ios" ) ) ) ]
987
1002
#[ test]
988
1003
fn test_sigwait ( ) {
989
- let mut mask = SigSet :: empty ( ) ;
990
- mask. add ( SIGUSR1 ) ;
991
- mask. add ( SIGUSR2 ) ;
992
- mask. thread_block ( ) . unwrap ( ) ;
993
-
994
- raise ( SIGUSR1 ) . unwrap ( ) ;
995
- assert_eq ! ( mask. wait( ) . unwrap( ) , SIGUSR1 ) ;
1004
+ thread:: spawn ( || {
1005
+ let mut mask = SigSet :: empty ( ) ;
1006
+ mask. add ( SIGUSR1 ) ;
1007
+ mask. add ( SIGUSR2 ) ;
1008
+ mask. thread_block ( ) . unwrap ( ) ;
1009
+
1010
+ raise ( SIGUSR1 ) . unwrap ( ) ;
1011
+ assert_eq ! ( mask. wait( ) . unwrap( ) , SIGUSR1 ) ;
1012
+ } ) . join ( ) . unwrap ( ) ;
996
1013
}
997
1014
}
0 commit comments