Revert commit 81144, and add a comment. It caused bugpoint timeouts
authorDuncan Sands <baldrick@free.fr>
Sun, 8 Nov 2009 20:55:48 +0000 (20:55 +0000)
committerDuncan Sands <baldrick@free.fr>
Sun, 8 Nov 2009 20:55:48 +0000 (20:55 +0000)
not to work any more on linux.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86481 91177308-0d34-0410-b5e6-96231b3b80d8

lib/System/Unix/Program.inc

index c52f3a88c044403f9aaa325a57737511eea63066..43c3606d9831133d8c346eb7eabd34df7f056802 100644 (file)
@@ -121,6 +121,9 @@ static bool RedirectIO(const Path *Path, int FD, std::string* ErrMsg) {
   return false;
 }
 
+static void TimeOutHandler(int Sig) {
+}
+
 static void SetMemoryLimits (unsigned size)
 {
 #if HAVE_SYS_RESOURCE_H
@@ -231,11 +234,14 @@ Program::Wait(unsigned secondsToWait,
     return -1;
   }
 
-  // Install a timeout handler.
+  // Install a timeout handler.  The handler itself does nothing, but the simple
+  // fact of having a handler at all causes the wait below to return with EINTR,
+  // unlike if we used SIG_IGN.
   if (secondsToWait) {
-    memset(&Act, 0, sizeof(Act));
-    Act.sa_handler = SIG_IGN;
+    Act.sa_sigaction = 0;
+    Act.sa_handler = TimeOutHandler;
     sigemptyset(&Act.sa_mask);
+    Act.sa_flags = 0;
     sigaction(SIGALRM, &Act, &Old);
     alarm(secondsToWait);
   }