Francois Gouget : testbot/testagentd: Fix the zero / infinite timeouts in the wait2 RPC.

Alexandre Julliard julliard at winehq.org
Tue Mar 26 11:52:22 CDT 2013


Module: tools
Branch: master
Commit: 6c6aa897db13a20ca4bd8c93b8f44361916d0dae
URL:    http://source.winehq.org/git/tools.git/?a=commit;h=6c6aa897db13a20ca4bd8c93b8f44361916d0dae

Author: Francois Gouget <fgouget at codeweavers.com>
Date:   Tue Mar 26 13:12:53 2013 +0100

testbot/testagentd: Fix the zero / infinite timeouts in the wait2 RPC.

---

 testbot/lib/WineTestBot/TestAgent.pm      |    2 +-
 testbot/src/testagentd/platform.h         |    2 ++
 testbot/src/testagentd/platform_unix.c    |    6 +++---
 testbot/src/testagentd/platform_windows.c |    2 +-
 testbot/src/testagentd/testagentd.c       |    3 ++-
 5 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/testbot/lib/WineTestBot/TestAgent.pm b/testbot/lib/WineTestBot/TestAgent.pm
index 645a18c..bce1a78 100644
--- a/testbot/lib/WineTestBot/TestAgent.pm
+++ b/testbot/lib/WineTestBot/TestAgent.pm
@@ -1122,7 +1122,7 @@ sub Wait($$$)
       if (!$self->_StartRPC($RPC_WAIT2) or
           !$self->_SendListSize(2) or
           !$self->_SendUInt64($Pid) or
-          !$self->_SendUInt32($Timeout))
+          !$self->_SendUInt32(defined $Timeout ? $Timeout : 0xffffffff))
       {
           return undef;
       }
diff --git a/testbot/src/testagentd/platform.h b/testbot/src/testagentd/platform.h
index 621ce98..fffaa4b 100644
--- a/testbot/src/testagentd/platform.h
+++ b/testbot/src/testagentd/platform.h
@@ -64,6 +64,8 @@ enum run_flags_t {
     RUN_DNTRUNC_ERR = 4,
 };
 
+#define RUN_NOTIMEOUT  ((uint32_t)0xffffffff)
+
 /* Starts the specified command in the background and reports the status to
  * the client.
  */
diff --git a/testbot/src/testagentd/platform_unix.c b/testbot/src/testagentd/platform_unix.c
index 48eef73..e003135 100644
--- a/testbot/src/testagentd/platform_unix.c
+++ b/testbot/src/testagentd/platform_unix.c
@@ -154,7 +154,7 @@ int platform_wait(SOCKET client, uint64_t pid, uint32_t timeout, uint32_t *child
         return 0;
     }
 
-    if (timeout)
+    if (timeout != RUN_NOTIMEOUT)
         deadline = time(NULL) + timeout;
     while (!child->reaped)
     {
@@ -170,14 +170,14 @@ int platform_wait(SOCKET client, uint64_t pid, uint32_t timeout, uint32_t *child
         debug("Waiting for " U64FMT "\n", pid);
         FD_ZERO(&rfds);
         FD_SET(client, &rfds);
-        if (timeout)
+        if (timeout != RUN_NOTIMEOUT)
         {
             tv.tv_sec = deadline - time(NULL);
             if (tv.tv_sec < 0)
                 tv.tv_sec = 0;
             tv.tv_usec = 0;
         }
-        ready = select(client+1, &rfds, NULL, NULL, timeout ? &tv : NULL);
+        ready = select(client+1, &rfds, NULL, NULL, timeout != RUN_NOTIMEOUT ? &tv : NULL);
         if (ready == 0)
         {
             /* This is the timeout */
diff --git a/testbot/src/testagentd/platform_windows.c b/testbot/src/testagentd/platform_windows.c
index 92fc9aa..a0dccfa 100644
--- a/testbot/src/testagentd/platform_windows.c
+++ b/testbot/src/testagentd/platform_windows.c
@@ -177,7 +177,7 @@ int platform_wait(SOCKET client, uint64_t pid, uint32_t timeout, uint32_t *child
     handles[0] = WSACreateEvent();
     WSAEventSelect(client, handles[0], FD_CLOSE);
     handles[1] = child->handle;
-    r = WaitForMultipleObjects(2, handles, FALSE, timeout * 1000);
+    r = WaitForMultipleObjects(2, handles, FALSE, timeout == RUN_NOTIMEOUT ? INFINITE : timeout * 1000);
 
     success = 0;
     switch (r)
diff --git a/testbot/src/testagentd/testagentd.c b/testbot/src/testagentd/testagentd.c
index 534495d..75782c4 100644
--- a/testbot/src/testagentd/testagentd.c
+++ b/testbot/src/testagentd/testagentd.c
@@ -34,8 +34,9 @@
  * 1.0:  Initial release.
  * 1.1:  Added the wait2 RPC.
  * 1.2:  Add more redirection options to the run RPC.
+ * 1.3:  Fix the zero / infinite timeouts in the wait2 RPC.
  */
-#define PROTOCOL_VERSION "testagentd 1.2"
+#define PROTOCOL_VERSION "testagentd 1.3"
 
 #define BLOCK_SIZE       65536
 




More information about the wine-cvs mailing list