]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Fix implementation of _cupsCondWait with timeout.
authorMichael R Sweet <michael.r.sweet@gmail.com>
Tue, 13 Mar 2018 01:56:12 +0000 (21:56 -0400)
committerMichael R Sweet <michael.r.sweet@gmail.com>
Tue, 13 Mar 2018 01:56:12 +0000 (21:56 -0400)
cups/thread.c

index 54ebc100b75cd2f3a0f8c28fb9ba0aa20bf5218e..c52f77710d1842694a1431131d1c1a30473a70e6 100644 (file)
@@ -1,9 +1,10 @@
 /*
  * Threading primitives for CUPS.
  *
- * Copyright 2009-2017 by Apple Inc.
+ * Copyright © 2009-2018 by Apple Inc.
  *
- * Licensed under Apache License v2.0.  See the file "LICENSE" for more information.
+ * Licensed under Apache License v2.0.  See the file "LICENSE" for more
+ * information.
  */
 
 /*
@@ -48,10 +49,19 @@ _cupsCondWait(_cups_cond_t  *cond,  /* I - Condition */
 {
   if (timeout > 0.0)
   {
+    struct timeval curtime;            /* Current time */
     struct timespec abstime;           /* Timeout */
 
-    abstime.tv_sec  = (long)timeout;
-    abstime.tv_nsec = (long)(1000000000 * (timeout - (long)timeout));
+    gettimeofday(&curtime, NULL);
+
+    abstime.tv_sec  = (long)timeout + curtime.tv_sec;
+    abstime.tv_nsec = (long)(1000000000 * (timeout - (long)timeout + 1000 * curtime.tv_usec));
+
+    while (abstime.tv_nsec >= 1000000000)
+    {
+      abstime.tv_nsec -= 1000000000;
+      abstime.tv_sec ++;
+    };
 
     pthread_cond_timedwait(cond, mutex, &abstime);
   }