|
|
@@ -36,21 +36,22 @@
|
|
|
#include <dpkg/subproc.h>
|
|
|
|
|
|
static int catch_signals[] = { SIGQUIT, SIGINT };
|
|
|
-static struct sigaction uncatch_signals[array_count(catch_signals)];
|
|
|
+static struct sigaction sa_save[array_count(catch_signals)];
|
|
|
|
|
|
void
|
|
|
subproc_signals_setup(const char *name)
|
|
|
{
|
|
|
+ struct sigaction sa;
|
|
|
size_t i;
|
|
|
- struct sigaction catchsig;
|
|
|
|
|
|
onerr_abort++;
|
|
|
- memset(&catchsig, 0, sizeof(catchsig));
|
|
|
- catchsig.sa_handler = SIG_IGN;
|
|
|
- sigemptyset(&catchsig.sa_mask);
|
|
|
- catchsig.sa_flags = 0;
|
|
|
+ memset(&sa, 0, sizeof(sa));
|
|
|
+ sigemptyset(&sa.sa_mask);
|
|
|
+ sa.sa_handler = SIG_IGN;
|
|
|
+ sa.sa_flags = 0;
|
|
|
+
|
|
|
for (i = 0; i < array_count(catch_signals); i++)
|
|
|
- if (sigaction(catch_signals[i], &catchsig, &uncatch_signals[i]))
|
|
|
+ if (sigaction(catch_signals[i], &sa, &sa_save[i]))
|
|
|
ohshite(_("unable to ignore signal %s before running %.250s"),
|
|
|
strsignal(catch_signals[i]), name);
|
|
|
push_cleanup(subproc_signals_cleanup, ~0, NULL, 0, 0);
|
|
|
@@ -63,7 +64,7 @@ subproc_signals_cleanup(int argc, void **argv)
|
|
|
size_t i;
|
|
|
|
|
|
for (i = 0; i < array_count(catch_signals); i++) {
|
|
|
- if (sigaction(catch_signals[i], &uncatch_signals[i], NULL)) {
|
|
|
+ if (sigaction(catch_signals[i], &sa_save[i], NULL)) {
|
|
|
fprintf(stderr, _("error un-catching signal %s: %s\n"),
|
|
|
strsignal(catch_signals[i]), strerror(errno));
|
|
|
onerr_abort++;
|