From 5252041c6b0bbbb0c846ce1c7ee784b9890d9874 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Fri, 14 Mar 2014 12:16:49 +0100 Subject: [PATCH] Fix Process timeouts. Fixes #5759 --- lib/base/process-unix.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/base/process-unix.cpp b/lib/base/process-unix.cpp index cd62913b8..479ff69b2 100644 --- a/lib/base/process-unix.cpp +++ b/lib/base/process-unix.cpp @@ -87,7 +87,9 @@ void Process::IOThreadProc(void) int count = 0; for (;;) { - double timeout = 1; + double now, timeout = -1; + + now = Utility::GetTime(); { boost::mutex::scoped_lock lock(l_ProcessMutex); @@ -106,8 +108,12 @@ void Process::IOThreadProc(void) pfds[i].events = POLLIN; pfds[i].revents = 0; - if (kv.second->GetTimeout() != 0 && kv.second->GetTimeout() < timeout) - timeout = kv.second->GetTimeout(); + if (kv.second->m_Timeout != 0) { + double delta = kv.second->m_Timeout - (now - kv.second->m_Result.ExecutionStart); + + if (timeout == -1 || delta < timeout) + timeout = delta; + } i++; } @@ -295,7 +301,7 @@ bool Process::DoEvents(void) if (rc > 0) { m_OutputStream.write(buffer, rc); - return true; + continue; } break; -- 2.40.0