瀏覽代碼

Try to fix linux deadlock when inferiors generate lots of output to stderr

git-svn-id: trunk@28972 -
pierre 10 年之前
父節點
當前提交
8f58b93e39
共有 1 個文件被更改,包括 13 次插入6 次删除
  1. 13 6
      packages/fpmkunit/src/fpmkunit.pp

+ 13 - 6
packages/fpmkunit/src/fpmkunit.pp

@@ -1736,11 +1736,6 @@ var
       until ConsoleOutput.Position >= BytesRead;
 
       ConsoleOutput.Position := BuffPos;
-    end
-    else
-    begin
-      // no data, wait 100 ms
-      Sleep(100);
     end;
 
     Result := n;
@@ -1759,7 +1754,19 @@ begin
 
     P.Execute;
     while P.Running do
-      ReadFromStream(false);
+      begin
+        // Only call ReadFromStream if Data from corresponding stream
+        // is already available, otherwise, on  linux, the read call
+        // is blocking, and thus it is not possible to be sure to handle
+        // big data amounts bboth on output and stderr pipes. PM.
+        if P.Output.NumBytesAvailable > 0 then
+          ReadFromStream(false)
+        else if P.StdErr.NumBytesAvailable > 0 then
+          ReadFromStream(true)
+        else
+      // no data, wait 100 ms
+          Sleep(100);
+      end;
 
     // read last part
     repeat