]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
csplit: don't prematurely terminate cleanup (Bug#9076)
authorPaul Eggert <eggert@cs.ucla.edu>
Fri, 15 Jul 2011 23:03:41 +0000 (16:03 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Fri, 15 Jul 2011 23:03:57 +0000 (16:03 -0700)
* src/csplit.c (interrupt_handler): Reset signal to SIG_DFL
after deleting the files, so that a second interrupt won't
prematurely terminate cleanup.
(main): Don't use SA_NODEFER | SA_RESETHAND, as that might
allow premature termination of cleanup.  Also, this ports better
to platforms like NonStop, which don't ahve SA_RESETHAND.

src/csplit.c

index 438d888a51b3f2179dd5056d1d15c5c52b5cf927..5d84c4580ae2651bf0afd96776df0c35c5782349 100644 (file)
@@ -225,6 +225,7 @@ static void
 interrupt_handler (int sig)
 {
   delete_all_files (true);
+  signal (sig, SIG_DFL);
   /* The signal has been reset to SIG_DFL, but blocked during this
      handler.  Force the default action of this signal once the
      handler returns and the block is removed.  */
@@ -1421,7 +1422,7 @@ main (int argc, char **argv)
 
     act.sa_handler = interrupt_handler;
     act.sa_mask = caught_signals;
-    act.sa_flags = SA_NODEFER | SA_RESETHAND;
+    act.sa_flags = 0;
 
     for (i = 0; i < nsigs; i++)
       if (sigismember (&caught_signals, sig[i]))