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