diff options
Diffstat (limited to 'stdlib/tst-system.c')
-rw-r--r-- | stdlib/tst-system.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/stdlib/tst-system.c b/stdlib/tst-system.c index f7fa74b2a6..5e0c79475f 100644 --- a/stdlib/tst-system.c +++ b/stdlib/tst-system.c @@ -25,6 +25,7 @@ #include <support/check.h> #include <support/temp_file.h> #include <support/support.h> +#include <support/xthread.h> #include <support/xunistd.h> static char *tmpdir; @@ -71,6 +72,20 @@ call_system (void *closure) } } +static void * +sleep_and_check_sigchld (void *closure) +{ + double *seconds = (double *) closure; + char cmd[namemax]; + sprintf (cmd, "sleep %lf" , *seconds); + TEST_COMPARE (system (cmd), 0); + + sigset_t blocked = {0}; + TEST_COMPARE (sigprocmask (SIG_BLOCK, NULL, &blocked), 0); + TEST_COMPARE (sigismember (&blocked, SIGCHLD), 0); + return NULL; +} + static int do_test (void) { @@ -154,6 +169,17 @@ do_test (void) xchmod (_PATH_BSHELL, st.st_mode); } + { + pthread_t long_sleep_thread = xpthread_create (NULL, + sleep_and_check_sigchld, + &(double) { 0.2 }); + pthread_t short_sleep_thread = xpthread_create (NULL, + sleep_and_check_sigchld, + &(double) { 0.1 }); + xpthread_join (short_sleep_thread); + xpthread_join (long_sleep_thread); + } + TEST_COMPARE (system (""), 0); return 0; |