]> err.no Git - dak/commitdiff
Install default SIGPIPE handler before calling dpkg-deb.
authorTorsten Werner <twerner@debian.org>
Sat, 2 Apr 2011 08:38:43 +0000 (10:38 +0200)
committerTorsten Werner <twerner@debian.org>
Sat, 2 Apr 2011 08:38:43 +0000 (10:38 +0200)
Signed-off-by: Torsten Werner <twerner@debian.org>
daklib/dbconn.py

index d39f8c582903b553d689da9bf508fa6104b5a729..5c987bdc56881ab01dbc7884aa9f31c26431017e 100755 (executable)
@@ -39,6 +39,7 @@ import re
 import psycopg2
 import traceback
 import commands
+import signal
 
 try:
     # python >= 2.6
@@ -487,6 +488,11 @@ __all__.append('BinContents')
 
 ################################################################################
 
+def subprocess_setup():
+    # Python installs a SIGPIPE handler by default. This is usually not what
+    # non-Python subprocesses expect.
+    signal.signal(signal.SIGPIPE, signal.SIG_DFL)
+
 class DBBinary(ORMObject):
     def __init__(self, package = None, source = None, version = None, \
         maintainer = None, architecture = None, poolfile = None, \
@@ -525,7 +531,8 @@ class DBBinary(ORMObject):
         package does not contain any regular file.
         '''
         fullpath = self.poolfile.fullpath
-        dpkg = Popen(['dpkg-deb', '--fsys-tarfile', fullpath], stdout = PIPE)
+        dpkg = Popen(['dpkg-deb', '--fsys-tarfile', fullpath], stdout = PIPE,
+            preexec_fn = subprocess_setup)
         tar = TarFile.open(fileobj = dpkg.stdout, mode = 'r|')
         for member in tar.getmembers():
             if not member.isdir():