diff --git a/c/unix/event.c b/c/unix/event.c index ad6ffe8..8591fc6 100644 --- a/c/unix/event.c +++ b/c/unix/event.c @@ -623,7 +623,7 @@ queue_ready_ports(bool wait, long seconds, long ticks) tv.tv_usec = 0; } else { - tv.tv_sec = seconds; + tv.tv_sec = (seconds > 0) ? 1 : 0; tv.tv_usec = ticks * (1000000 / TICKS_PER_SECOND); } else @@ -648,11 +648,17 @@ queue_ready_ports(bool wait, long seconds, long ticks) poll_time = -1; return NO_ERRORS; } - else if (left == 0 && seconds == -1) - return NO_ERRORS; - else if (left == 0 && seconds > 0){ - tv.tv_sec = --seconds; - tv.tv_usec = 0; + else if (wait && (left == 0) && (limfd == 0)){ + if (seconds > 1){ + seconds--; + tv.tv_sec = 1; /* select maybe destroyed tv */ + tv.tv_usec = 0; /* we already waited the usecs */ + } + else if (seconds > -1) return NO_ERRORS; + else { /* loop if seconds == -1 */ + tv.tv_sec = 1; + tv.tv_usec = 0; + } } else if (left == 0) return NO_ERRORS;