diff --git a/src/threads.c b/src/threads.c
index 390adc6ec1a285d3b914bf442ca2adebcb4df931..6eb5b7359c9a70df819fc0b6006c9c4ff4fcefc1 100644
--- a/src/threads.c
+++ b/src/threads.c
@@ -313,6 +313,11 @@ PMOD_EXPORT int co_wait_timeout(COND_T *c, PIKE_MUTEX_T *m, long s, long nanos)
   ACCURATE_GETTIMEOFDAY(&ct);
   timeout.tv_sec = ct.tv_sec + s;
   timeout.tv_nsec = ct.tv_usec * 1000 + nanos;
+  s = timeout.tv_nsec/1000000000;
+  if (s) {
+    timeout.tv_sec += s;
+    timeout.tv_nsec -= s * 1000000000;
+  }
   return pthread_cond_timedwait(c, m, &timeout);
 #endif /* HAVE_PTHREAD_COND_RELTIMEDWAIT_NP */
 #else /* !POSIX_THREADS */