summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt/progress.py9
-rw-r--r--debian/changelog1
-rw-r--r--doc/examples/inst.py5
3 files changed, 8 insertions, 7 deletions
diff --git a/apt/progress.py b/apt/progress.py
index d69ca6e6..8ac0e1dc 100644
--- a/apt/progress.py
+++ b/apt/progress.py
@@ -24,6 +24,8 @@ import os
import re
import fcntl
import string
+from errno import *
+import select
import apt_pkg
class OpProgress(object):
@@ -144,6 +146,7 @@ class InstallProgress(DumbInstallProgress):
"""
def __init__(self):
DumbInstallProgress.__init__(self)
+ self.selectTimeout = 0.1
(read, write) = os.pipe()
self.writefd=write
self.statusfd = os.fdopen(read, "r")
@@ -167,7 +170,7 @@ class InstallProgress(DumbInstallProgress):
self.read += os.read(self.statusfd.fileno(),1)
except OSError, (errno,errstr):
# resource temporarly unavailable is ignored
- if errno != 11:
+ if errno != EAGAIN and errnor != EWOULDBLOCK:
print errstr
if self.read.endswith("\n"):
s = self.read
@@ -189,15 +192,15 @@ class InstallProgress(DumbInstallProgress):
self.percent = float(percent)
self.status = string.strip(status_str)
self.read = ""
-
def fork(self):
return os.fork()
def waitChild(self):
while True:
+ select.select([self.statusfd],[],[], self.selectTimeout)
+ self.updateInterface()
(pid, res) = os.waitpid(self.child_pid,os.WNOHANG)
if pid == self.child_pid:
break
- self.updateInterface()
return os.WEXITSTATUS(res)
def run(self, pm):
pid = self.fork()
diff --git a/debian/changelog b/debian/changelog
index 5f8db68b..02ec00a1 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -6,6 +6,7 @@ python-apt (0.6.20) unstable; urgency=low
- tightend dependency (closes: #383478)
* apt/progress.py:
- use os._exit() in the child (lp: #53298)
+ - use select() when checking for statusfd (lp: #53282)
--
diff --git a/doc/examples/inst.py b/doc/examples/inst.py
index 0e91c28f..ff9d452c 100644
--- a/doc/examples/inst.py
+++ b/doc/examples/inst.py
@@ -29,10 +29,7 @@ cache = apt.Cache(apt.progress.OpTextProgress())
fprogress = apt.progress.TextFetchProgress()
iprogress = TextInstallProgress()
-pkg = cache["test-package"]
-pkg.markUpgrade()
-cache.commit(fprogress,iprogress)
-sys.exit(1)
+pkg = cache["3dchess"]
# install or remove, the importend thing is to keep us busy :)
if pkg.isInstalled: