updates.
[silc.git] / lib / silcutil / silcschedule.c
index 4a7522200075ba941c353f8c7c07570449c697a3..5929720daf4ed2c6c770a891a04359996cd9b4ba 100644 (file)
@@ -328,10 +328,14 @@ do {                                                                          \
           /* Calculate the next timeout for select() */                            \
           queue->timeout.tv_sec = task->timeout.tv_sec - curtime.tv_sec;    \
           queue->timeout.tv_usec = task->timeout.tv_usec - curtime.tv_usec; \
+         if (queue->timeout.tv_sec < 0)                                    \
+            queue->timeout.tv_sec = 0;                                             \
                                                                            \
           /* We wouldn't want to go under zero, check for it. */           \
           if (queue->timeout.tv_usec < 0) {                                \
             queue->timeout.tv_sec -= 1;                                            \
+           if (queue->timeout.tv_sec < 0)                                  \
+              queue->timeout.tv_sec = 0;                                   \
             queue->timeout.tv_usec += 1000000L;                                    \
           }                                                                \
         }                                                                  \
@@ -476,6 +480,12 @@ int silc_schedule_one(int timeout_usecs)
     /* Error */
     if (errno == EINTR)
       break;
+#if 1
+    if (errno == EINVAL && schedule.timeout) {
+      SILC_LOG_ERROR(("Invalid argument (invalid timeout): %lu %lu",
+                     schedule.timeout->tv_sec, schedule.timeout->tv_usec));
+    }
+#endif
     SILC_LOG_ERROR(("Error in select(): %s", strerror(errno)));
     break;
   case 0: