--- xfsprogs-3.1.10/copy/xfs_copy.c +++ xfsprogs-3.1.10-sigprocmask/copy/xfs_copy.c @@ -72,6 +72,16 @@ xfs_off_t write_log_header(int fd, wbuf #define LAST 0x10 /* final message we print */ void +signal_maskfunc(int addset, int newset) +{ + sigset_t set; + + sigemptyset(&set); + sigaddset(&set, addset); + sigprocmask(newset, &set, NULL); +} + +void do_message(int flags, int code, const char *fmt, ...) { va_list ap; @@ -478,9 +488,9 @@ write_wbuf(void) if (target[i].state != INACTIVE) pthread_mutex_unlock(&targ[i].wait); /* wake up */ - sigrelse(SIGCHLD); + signal_maskfunc(SIGCHLD, SIG_UNBLOCK); pthread_mutex_lock(&mainwait); - sighold(SIGCHLD); + signal_maskfunc(SIGCHLD, SIG_BLOCK); } @@ -847,7 +857,7 @@ main(int argc, char **argv) /* set up sigchild signal handler */ signal(SIGCHLD, handler); - sighold(SIGCHLD); + signal_maskfunc(SIGCHLD, SIG_BLOCK); /* make children */