|
@@ -1,82 +0,0 @@
|
|
|
---- xfsprogs-4.3.0.orig/copy/xfs_copy.c 2015-10-15 23:31:26.000000000 +0200
|
|
|
-+++ xfsprogs-4.3.0/copy/xfs_copy.c 2015-11-27 06:04:00.000000000 +0100
|
|
|
-@@ -236,6 +236,10 @@ handler(int sig)
|
|
|
- {
|
|
|
- pid_t pid;
|
|
|
- int status, i;
|
|
|
-+ struct sigaction action;
|
|
|
-+
|
|
|
-+ action.sa_handler = handler;
|
|
|
-+ action.sa_flags = 0;
|
|
|
-
|
|
|
- pid = wait(&status);
|
|
|
-
|
|
|
-@@ -268,7 +272,7 @@ handler(int sig)
|
|
|
- pthread_exit(NULL);
|
|
|
- }
|
|
|
-
|
|
|
-- signal(SIGCHLD, handler);
|
|
|
-+ sigaction(SIGCHLD, &action, NULL);
|
|
|
- return;
|
|
|
- } else {
|
|
|
- /* it just croaked it bigtime, log it */
|
|
|
-@@ -290,7 +294,7 @@ handler(int sig)
|
|
|
- do_warn(_("%s: Unknown child died (should never happen!)\n"), progname);
|
|
|
- die_perror();
|
|
|
- pthread_exit(NULL);
|
|
|
-- signal(SIGCHLD, handler);
|
|
|
-+ sigaction(SIGCHLD, &action, NULL);
|
|
|
- }
|
|
|
-
|
|
|
- void
|
|
|
-@@ -466,6 +470,11 @@ void
|
|
|
- write_wbuf(void)
|
|
|
- {
|
|
|
- int i;
|
|
|
-+ sigset_t unblock, initial;
|
|
|
-+
|
|
|
-+ sigemptyset(&unblock);
|
|
|
-+ sigaddset(&unblock, SIGCHLD);
|
|
|
-+
|
|
|
-
|
|
|
- /* verify target threads */
|
|
|
- for (i = 0; i < num_targets; i++)
|
|
|
-@@ -477,9 +486,9 @@ write_wbuf(void)
|
|
|
- if (target[i].state != INACTIVE)
|
|
|
- pthread_mutex_unlock(&targ[i].wait); /* wake up */
|
|
|
-
|
|
|
-- sigrelse(SIGCHLD);
|
|
|
-+ sigprocmask(SIG_UNBLOCK, &unblock, &initial);
|
|
|
- pthread_mutex_lock(&mainwait);
|
|
|
-- sighold(SIGCHLD);
|
|
|
-+ sigprocmask(SIG_SETMASK, &initial, NULL);
|
|
|
- }
|
|
|
-
|
|
|
- void
|
|
|
-@@ -551,6 +560,12 @@ main(int argc, char **argv)
|
|
|
- libxfs_init_t xargs;
|
|
|
- thread_args *tcarg;
|
|
|
- struct stat64 statbuf;
|
|
|
-+ struct sigaction saction;
|
|
|
-+ sigset_t sigblock, initial;
|
|
|
-+
|
|
|
-+ saction.sa_handler = handler;
|
|
|
-+ saction.sa_flags = 0;
|
|
|
-+
|
|
|
-
|
|
|
- progname = basename(argv[0]);
|
|
|
-
|
|
|
-@@ -892,8 +907,11 @@ main(int argc, char **argv)
|
|
|
-
|
|
|
- /* set up sigchild signal handler */
|
|
|
-
|
|
|
-- signal(SIGCHLD, handler);
|
|
|
-- sighold(SIGCHLD);
|
|
|
-+ sigaction(SIGCHLD, &saction, NULL);
|
|
|
-+ sigemptyset(&sigblock);
|
|
|
-+ sigaddset(&sigblock, SIGCHLD);
|
|
|
-+ sigprocmask(SIG_BLOCK, &sigblock, &initial);
|
|
|
-+
|
|
|
-
|
|
|
- /* make children */
|
|
|
-
|