[GTK] Waiting on the gdb process will lead to deadlock
authorzandobersek@gmail.com <zandobersek@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 15 Jan 2013 16:03:37 +0000 (16:03 +0000)
committerzandobersek@gmail.com <zandobersek@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 15 Jan 2013 16:03:37 +0000 (16:03 +0000)
https://bugs.webkit.org/show_bug.cgi?id=106906

Reviewed by Philippe Normand.

Use communicate() rather than wait() on the Popen object that's running the gdb
command. This avoids the deadlock that occurs on the GTK builders.

* Scripts/webkitpy/layout_tests/port/gtk.py:
(GtkPort._get_gdb_output):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@139743 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Tools/ChangeLog
Tools/Scripts/webkitpy/layout_tests/port/gtk.py

index 598dc09..441fad4 100644 (file)
@@ -1,5 +1,18 @@
 2013-01-15  Zan Dobersek  <zdobersek@igalia.com>
 
+        [GTK] Waiting on the gdb process will lead to deadlock
+        https://bugs.webkit.org/show_bug.cgi?id=106906
+
+        Reviewed by Philippe Normand.
+
+        Use communicate() rather than wait() on the Popen object that's running the gdb
+        command. This avoids the deadlock that occurs on the GTK builders.
+
+        * Scripts/webkitpy/layout_tests/port/gtk.py:
+        (GtkPort._get_gdb_output):
+
+2013-01-15  Zan Dobersek  <zdobersek@igalia.com>
+
         [GTK] Limit the number of frames printed out when backtracing with gdb
         https://bugs.webkit.org/show_bug.cgi?id=106901
 
index c5ac379..0da5e2d 100644 (file)
@@ -127,10 +127,9 @@ class GtkPort(Port):
     def _get_gdb_output(self, coredump_path):
         cmd = ['gdb', '-ex', 'thread apply all bt 1024', '--batch', str(self._path_to_driver()), coredump_path]
         proc = subprocess.Popen(cmd, stdin=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-        proc.wait()
-        errors = [l.strip().decode('utf8', 'ignore') for l in proc.stderr.readlines()]
-        trace = proc.stdout.read().decode('utf8', 'ignore')
-        return (trace, errors)
+        stdout, stderr = proc.communicate()
+        errors = [l.strip().decode('utf8', 'ignore') for l in stderr.splitlines()]
+        return (stdout.decode('utf8', 'ignore'), errors)
 
     def _get_crash_log(self, name, pid, stdout, stderr, newer_than):
         pid_representation = str(pid or '<unknown>')