Module Name: src Committed By: pooka Date: Sun Dec 20 13:49:36 UTC 2009
Modified Files: src/sys/rump/librump/rumpkern: ltsleep.c Log Message: pthread_cond_timedwait (and therefore rumpuser_cv_timedwait) wants an absolute time instead of a delta. Fix bug which caused timed tsleeps to always wake up immediately (unless the system clock was around "0", which was not very probable ;). To generate a diff of this commit: cvs rdiff -u -r1.23 -r1.24 src/sys/rump/librump/rumpkern/ltsleep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/rump/librump/rumpkern/ltsleep.c diff -u src/sys/rump/librump/rumpkern/ltsleep.c:1.23 src/sys/rump/librump/rumpkern/ltsleep.c:1.24 --- src/sys/rump/librump/rumpkern/ltsleep.c:1.23 Sat Dec 5 22:44:08 2009 +++ src/sys/rump/librump/rumpkern/ltsleep.c Sun Dec 20 13:49:36 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: ltsleep.c,v 1.23 2009/12/05 22:44:08 pooka Exp $ */ +/* $NetBSD: ltsleep.c,v 1.24 2009/12/20 13:49:36 pooka Exp $ */ /* * Copyright (c) 2007 Antti Kantee. All Rights Reserved. @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ltsleep.c,v 1.23 2009/12/05 22:44:08 pooka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ltsleep.c,v 1.24 2009/12/20 13:49:36 pooka Exp $"); #include <sys/param.h> #include <sys/kernel.h> @@ -58,6 +58,7 @@ static int sleeper(struct ltsleeper *ltsp, int timo) { + struct timespec ts, ticks; int rv, nlocks; LIST_INSERT_HEAD(&sleepers, ltsp, entries); @@ -65,8 +66,12 @@ /* protected by biglock */ if (timo) { + ticks.tv_sec = timo / hz; + ticks.tv_nsec = (timo % hz) * (1000000000/hz); + nanotime(&ts); + timespecadd(&ts, &ticks, &ts); if (rumpuser_cv_timedwait(ltsp->cv, rump_giantlock, - timo / hz, (timo % hz) * (1000000000/hz)) == 0) + ts.tv_sec, ts.tv_nsec) == 0) rv = 0; else rv = EWOULDBLOCK;