version 1.21, 2014/07/05 06:35:03 |
version 1.22, 2014/07/05 07:25:27 |
|
|
/* |
/* |
* Remove the child |
* Remove the child |
*/ |
*/ |
#if defined(POSIX_SIGNALS) |
sigset_t set, oset; |
sigset_t set; |
|
|
|
sigemptyset(&set); |
sigemptyset(&set); |
sigaddset(&set, SIGCHLD); |
sigaddset(&set, SIGCHLD); |
sigprocmask(SIG_BLOCK, &set, NULL); |
sigprocmask(SIG_BLOCK, &set, &oset); |
#else /* !POSIX_SIGNALS */ |
|
int oldmask; |
|
|
|
oldmask = sigblock(sigmask(SIGCHLD)); |
|
#endif /* POSIX_SIGNALS */ |
|
|
|
if (prevpc != NULL) |
if (prevpc != NULL) |
prevpc->c_next = pc->c_next; |
prevpc->c_next = pc->c_next; |
else |
else |
childlist = pc->c_next; |
childlist = pc->c_next; |
|
|
#if defined(POSIX_SIGNALS) |
sigprocmask(SIG_SETMASK, &oset, NULL); |
sigprocmask(SIG_UNBLOCK, &set, NULL); |
|
#else |
|
sigsetmask(oldmask); |
|
#endif /* POSIX_SIGNALS */ |
|
|
|
(void) free(child->c_name); |
(void) free(child->c_name); |
--activechildren; |
--activechildren; |