Quellcode durchsuchen

* Applied patch from Brian M. Carlson <sandals@crustytoothpaste.ath.cx>
to add backward support for arches that lacks pselect support,
closes: #448406.

Otavio Salvador vor 18 Jahren
Ursprung
Commit
919e5852f2
2 geänderte Dateien mit 28 neuen und 1 gelöschten Zeilen
  1. 24 0
      apt-pkg/deb/dpkgpm.cc
  2. 4 1
      debian/changelog

+ 24 - 0
apt-pkg/deb/dpkgpm.cc

@@ -543,6 +543,27 @@ bool pkgDPkgPM::CloseLog()
    return true;
 }
 
+/*{{{*/
+// This implements a racy version of pselect for those architectures
+// that don't have a working implementation.
+// FIXME: Probably can be removed on Lenny+1
+static int racy_pselect(int nfds, fd_set *readfds, fd_set *writefds,
+   fd_set *exceptfds, const struct timespec *timeout,
+   const sigset_t *sigmask)
+{
+   sigset_t origmask;
+   struct timeval tv;
+   int retval;
+
+   tv.tv_sec = timeout->tv.tv_sec;
+   tv.tv_usec = timeout->tv.tv_nsec/1000;
+
+   sigprocmask(SIG_SETMASK, &sigmask, &origmask);
+   retval = select(nfds, readfds, writefds, exceptfds, &tv);
+   sigprocmask(SIG_SETMASK, &origmask, 0);
+   return retval;
+}
+/*}}}*/
 
 // DPkgPM::Go - Run the sequence					/*{{{*/
 // ---------------------------------------------------------------------
@@ -855,6 +876,9 @@ bool pkgDPkgPM::Go(int OutStatusFd)
 	 tv.tv_nsec = 0;
 	 select_ret = pselect(max(master, _dpkgin)+1, &rfds, NULL, NULL, 
 			      &tv, &original_sigmask);
+	 if (select_ret < 0 && (errno == EINVAL || errno == ENOSYS))
+	    select_ret = racy_pselect(max(master, _dpkgin)+1, &rfds, NULL,
+				      NULL, &tv, &original_sigmask);
 	 if (select_ret == 0) 
   	    continue;
   	 else if (select_ret < 0 && errno == EINTR)

+ 4 - 1
debian/changelog

@@ -12,8 +12,11 @@ apt (0.7.9) UNRELEASED; urgency=low
 
   [ Otavio Salvador ]
   * Fix configure script to check for CURL library and headers presense.
+  * Applied patch from Brian M. Carlson <sandals@crustytoothpaste.ath.cx>
+    to add backward support for arches that lacks pselect support,
+    closes: #448406.
 
- -- Otavio Salvador <otavio@debian.org>  Mon, 29 Oct 2007 10:15:52 -0200
+ -- Otavio Salvador <otavio@debian.org>  Mon, 29 Oct 2007 15:53:32 -0200
 
 apt (0.7.8) unstable; urgency=low