From: Paul Eggert Date: Fri, 15 Jul 2011 23:03:41 +0000 (-0700) Subject: csplit: don't prematurely terminate cleanup (Bug#9076) X-Git-Tag: v8.13~67 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=837e1f55196f826b92d660808f594fde36651655;p=thirdparty%2Fcoreutils.git csplit: don't prematurely terminate cleanup (Bug#9076) * 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. --- diff --git a/src/csplit.c b/src/csplit.c index 438d888a51..5d84c4580a 100644 --- a/src/csplit.c +++ b/src/csplit.c @@ -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]))