run-report: Restore SIGPIPE default handler in subprocess calls
authorChristian Babeux <christian.babeux@efficios.com>
Tue, 18 Dec 2012 21:31:15 +0000 (16:31 -0500)
committerDavid Goulet <dgoulet@efficios.com>
Tue, 18 Dec 2012 21:47:58 +0000 (16:47 -0500)
Python override the SIGPIPE default handler because it prefers to check
every write and raise an IOError exception rather than taking SIGPIPE
[1].

This behavior has the unfortunate side-effect of polluting stdout with
broken pipe messages on shell pipelines invocations (e.g. echo foo |
grep something | etc.) in shell scripts spawned via subprocess.Popen().

This commit fix the polluting of stdout by restoring the default SIGPIPE
handler on subprocess calls.

[1] - http://bugs.python.org/issue1652

Signed-off-by: Christian Babeux <christian.babeux@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
tests/run-report.py

index 73645fd420764c29ad9aea183267b3b7c639f5c0..2e897475a15b854dd9dde8b31228565869f47cf0 100755 (executable)
@@ -7,7 +7,7 @@ import Queue
 import time
 import shlex
 
-from signal import signal, SIGTERM, SIGINT
+from signal import signal, SIGTERM, SIGINT, SIGPIPE, SIG_DFL
 
 SESSIOND_BIN_NAME = "lttng-sessiond"
 SESSIOND_BIN_PATH = "src/bin/lttng-sessiond/"
@@ -182,7 +182,7 @@ class TestWorker(threading.Thread):
         env = os.environ
         env['TEST_NO_SESSIOND'] = '1'
 
-        test = subprocess.Popen([bin_path_name], env=env)
+        test = subprocess.Popen([bin_path_name], env=env, preexec_fn = lambda: signal(SIGPIPE, SIG_DFL))
         test.wait()
 
         # Send ret value to main thread
This page took 0.025179 seconds and 4 git commands to generate.