From: Gunnar Beutner Date: Fri, 14 Mar 2014 11:16:49 +0000 (+0100) Subject: Fix Process timeouts. X-Git-Tag: v0.0.9~95 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5252041c6b0bbbb0c846ce1c7ee784b9890d9874;p=icinga2 Fix Process timeouts. Fixes #5759 --- 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;