* Restore SIGINT/SIGQUIT handlers to their old values (...
authorArch Librarian <arch@canonical.com>
Mon, 20 Sep 2004 17:05:10 +0000 (17:05 +0000)
committerArch Librarian <arch@canonical.com>
Mon, 20 Sep 2004 17:05:10 +0000 (17:05 +0000)
Author: mdz
Date: 2004-01-27 02:25:01 GMT
* Restore SIGINT/SIGQUIT handlers to their old values (rather than
SIG_DFL) after invoking dpkg (Closes: #229854)

apt-pkg/deb/dpkgpm.cc
debian/changelog

index 1548a47..d80b231 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: dpkgpm.cc,v 1.27 2003/07/26 00:25:44 mdz Exp $
+// $Id: dpkgpm.cc,v 1.28 2004/01/27 02:25:01 mdz Exp $
 /* ######################################################################
 
    DPKG Package Manager - Provide an interface to dpkg
@@ -436,8 +436,8 @@ bool pkgDPkgPM::Go()
          it forks scripts. What happens is that when you hit ctrl-c it sends
         it to all processes in the group. Since dpkg ignores the signal 
         it doesn't die but we do! So we must also ignore it */
-      signal(SIGQUIT,SIG_IGN);
-      signal(SIGINT,SIG_IGN);
+      sighandler_t old_SIGQUIT = signal(SIGQUIT,SIG_IGN);
+      sighandler_t old_SIGINT = signal(SIGINT,SIG_IGN);
                     
       // Fork dpkg
       pid_t Child = ExecFork();
@@ -479,12 +479,16 @@ bool pkgDPkgPM::Go()
         if (errno == EINTR)
            continue;
         RunScripts("DPkg::Post-Invoke");
+
+         // Restore sig int/quit
+         signal(SIGQUIT,old_SIGQUIT);
+         signal(SIGINT,old_SIGINT);
         return _error->Errno("waitpid","Couldn't wait for subprocess");
       }
 
       // Restore sig int/quit
-      signal(SIGQUIT,SIG_DFL);
-      signal(SIGINT,SIG_DFL);
+      signal(SIGQUIT,old_SIGQUIT);
+      signal(SIGINT,old_SIGINT);
        
       // Check for an error code.
       if (WIFEXITED(Status) == 0 || WEXITSTATUS(Status) != 0)
index bab5165..cbbbf9f 100644 (file)
@@ -6,6 +6,8 @@ apt (0.5.22) unstable; urgency=low
   * Fix apt-get's suggests/recommends printing, which was skipping every
     other dependency due to both using GlobOr and incrementing the DepIterator
     (Closes: #229722)
+  * Restore SIGINT/SIGQUIT handlers to their old values (rather than
+    SIG_DFL) after invoking dpkg (Closes: #229854)
 
  --