]> git.wh0rd.org - dump.git/commitdiff
Fixed the signal handling in dump.
authorStelian Pop <stelian@popies.net>
Sat, 19 Aug 2000 22:06:03 +0000 (22:06 +0000)
committerStelian Pop <stelian@popies.net>
Sat, 19 Aug 2000 22:06:03 +0000 (22:06 +0000)
CHANGES
dump/tape.c

diff --git a/CHANGES b/CHANGES
index f5126aa2ff539c9f237e3cc420fd93720780ee12..5d717ad32468ca54b8dc2463894a790d706cfbab 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,11 @@
-$Id: CHANGES,v 1.68 2000/06/30 09:12:14 stelian Exp $
+$Id: CHANGES,v 1.69 2000/08/19 22:06:03 stelian Exp $
+
+Changes between versions 0.4b17 and 0.4b19 (released ?????????????)
+===================================================================
+
+1.     Fixed the signal handling in dump (which I broke in 0.4b17)
+       which was causing several strange dump failures (dump
+       hanged or segmentation faults etc). 
 
 Changes between versions 0.4b17 and 0.4b18 (released June 30, 2000)
 ===================================================================
index c1046674682714d459d00a25574d494fda3f9208..851a5cdc5204375bac819394cfd9f894fbe7014b 100644 (file)
@@ -40,7 +40,7 @@
 
 #ifndef lint
 static const char rcsid[] =
-       "$Id: tape.c,v 1.20 2000/06/01 18:30:08 stelian Exp $";
+       "$Id: tape.c,v 1.21 2000/08/19 22:06:03 stelian Exp $";
 #endif /* not lint */
 
 #ifdef __linux__
@@ -877,9 +877,9 @@ Exit(int status)
 static void
 proceed(int signo)
 {
-       caught++;
        if (ready)
                siglongjmp(jmpbuf, 1);
+       caught++;
 }
 
 void
@@ -895,6 +895,9 @@ enslave(void)
        master = getpid();
 
     {  struct sigaction sa;
+       sa.sa_sigaction = NULL;
+       sigemptyset(&sa.sa_mask);
+       sa.sa_flags = 0;
        sa.sa_handler = dumpabort;
        sigaction(SIGTERM, &sa, NULL); /* Slave sends SIGTERM on dumpabort() */
        sa.sa_handler = sigpipe;
@@ -1081,6 +1084,7 @@ doslave(int cmd, int slave_number)
                if (wrote < 0) {
                        (void) kill(master, SIGUSR1);
                        sigemptyset(&sigset);
+                       sigaddset(&sigset, SIGINT);
                        for (;;)
                                sigsuspend(&sigset);
                } else {