From 837e1f55196f826b92d660808f594fde36651655 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Fri, 15 Jul 2011 16:03:41 -0700 Subject: 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. --- src/csplit.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/csplit.c b/src/csplit.c index 438d888a5..5d84c4580 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])) -- cgit v1.2.3-54-g00ecf