_lwp_unpark(unpark, unparkhint);
if (ts) {
- uint32_t msecs = ts->tv_sec*1000 + ts->tv_nsec/(1000*1000);
+ uint64_t msecs = ts->tv_sec*1000 + ts->tv_nsec/(1000*1000);
if (flags & TIMER_ABSTIME) {
rv = minios_absmsleep(msecs);
void minios_wake(struct thread *thread);
void minios_block(struct thread *thread);
-int minios_msleep(uint32_t millisecs);
-int minios_absmsleep(uint32_t millisecs);
+int minios_msleep(uint64_t millisecs);
+int minios_absmsleep(uint64_t millisecs);
#endif /* __MINIOS_SCHED_H__ */
return rv;
}
-int minios_msleep(uint32_t millisecs)
+int minios_msleep(uint64_t millisecs)
{
return dosleep(NOW() + MILLISECS(millisecs));
}
-int minios_absmsleep(uint32_t millisecs)
+int minios_absmsleep(uint64_t millisecs)
{
+ uint32_t secs;
+ uint64_t nsecs;
- return dosleep(MILLISECS(millisecs));
+ /* oh the silliness! */
+ minios_clock_wall(&secs, &nsecs);
+ millisecs -= 1000ULL*(uint64_t)secs + nsecs/(1000ULL*1000);
+
+ return dosleep(MILLISECS(millisecs) + NOW());
}
void minios_wake(struct thread *thread)