Browse Source

* apt-pkg/deb/dpkgpm.cc:
- fix potential hang when in a backgroud process group

Michael Vogt 17 years ago
parent
commit
07dd557b6f
3 changed files with 17 additions and 8 deletions
  1. 12 4
      apt-pkg/deb/dpkgpm.cc
  2. 1 1
      configure.in
  3. 4 3
      debian/changelog

+ 12 - 4
apt-pkg/deb/dpkgpm.cc

@@ -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);
 

+ 1 - 1
configure.in

@@ -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)

+ 4 - 3
debian/changelog

@@ -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