* apt-pkg/deb/dpkgpm.cc:
authorMichael Vogt <michael.vogt@ubuntu.com>
Mon, 24 Nov 2008 09:44:46 +0000 (10:44 +0100)
committerMichael Vogt <michael.vogt@ubuntu.com>
Mon, 24 Nov 2008 09:44:46 +0000 (10:44 +0100)
  - fix potential hang when in a backgroud process group

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

index 2e9dede..a88e230 100644 (file)
@@ -563,6 +563,11 @@ static int racy_pselect(int nfds, fd_set *readfds, fd_set *writefds,
 */
 bool pkgDPkgPM::Go(int OutStatusFd)
 {
+   fd_set rfds;
+   struct timespec tv;
+   sigset_t sigmask;
+   sigset_t original_sigmask;
+
    unsigned int MaxArgs = _config->FindI("Dpkg::MaxArgs",8*1024);   
    unsigned int MaxArgBytes = _config->FindI("Dpkg::MaxArgBytes",32*1024);
    bool NoTriggers = _config->FindB("DPkg::NoTriggers",false);
@@ -777,7 +782,14 @@ bool pkgDPkgPM::Go(int OutStatusFd)
         rtt = tt;
         cfmakeraw(&rtt);
         rtt.c_lflag &= ~ECHO;
+        // block SIGTTOU during tcsetattr to prevent a hang if
+        // the process is a member of the background process group
+        // http://www.opengroup.org/onlinepubs/000095399/functions/tcsetattr.html
+        sigemptyset(&sigmask);
+        sigaddset(&sigmask, SIGTTOU);
+        sigprocmask(SIG_BLOCK,&sigmask, &original_sigmask);
         tcsetattr(0, TCSAFLUSH, &rtt);
+        sigprocmask(SIG_SETMASK, &original_sigmask, 0);
       }
 
        // Fork dpkg
@@ -844,10 +856,6 @@ bool pkgDPkgPM::Go(int OutStatusFd)
         close(slave);
 
       // setups fds
-      fd_set rfds;
-      struct timespec tv;
-      sigset_t sigmask;
-      sigset_t original_sigmask;
       sigemptyset(&sigmask);
       sigprocmask(SIG_BLOCK,&sigmask,&original_sigmask);
 
index 679e601..aaaa44f 100644 (file)
@@ -18,7 +18,7 @@ AC_CONFIG_AUX_DIR(buildlib)
 AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in)
 
 dnl -- SET THIS TO THE RELEASE VERSION --
-AC_DEFINE_UNQUOTED(VERSION,"0.7.14ubuntu6")
+AC_DEFINE_UNQUOTED(VERSION,"0.7.14ubuntu7")
 PACKAGE="apt"
 AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE")
 AC_SUBST(PACKAGE)
index 0c7e07c..042603a 100644 (file)
@@ -1,11 +1,12 @@
-apt (0.7.14ubuntu7) intrepid; urgency=low
+apt (0.7.14ubuntu7) jaunty; urgency=low
 
   * cmdline/apt-cache.cc:
     - remove the gettext from a string that consists entirely 
       of variables (LP: #56792)
-  * 
+  * apt-pkg/deb/dpkgpm.cc:
+    - fix potential hang when in a backgroud process group
 
- --
+ -- Michael Vogt <michael.vogt@ubuntu.com>  Tue, 28 Oct 2008 21:09:12 +0100
 
 apt (0.7.14ubuntu6) intrepid; urgency=low