Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 19 Feb 2012 21:52:19 +1100 (EST)
From:      Bruce Evans <brde@optusnet.com.au>
To:        David Xu <davidxu@FreeBSD.org>
Cc:        svn-src-head@FreeBSD.org, svn-src-all@FreeBSD.org, src-committers@FreeBSD.org
Subject:   Re: svn commit: r231906 - head/lib/libthr/thread
Message-ID:  <20120219214118.G1461@besplex.bde.org>
In-Reply-To: <201202190817.q1J8HEm1071390@svn.freebsd.org>
References:  <201202190817.q1J8HEm1071390@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, 19 Feb 2012, David Xu wrote:

> Log:
>  Check both seconds and nanoseconds are zero, only checking nanoseconds
>  is zero may trigger timeout too early. It seems a copy&paste bug.
>
> Modified:
>  head/lib/libthr/thread/thr_umtx.c
>
> Modified: head/lib/libthr/thread/thr_umtx.c
> ==============================================================================
> --- head/lib/libthr/thread/thr_umtx.c	Sun Feb 19 07:44:38 2012	(r231905)
> +++ head/lib/libthr/thread/thr_umtx.c	Sun Feb 19 08:17:14 2012	(r231906)
> @@ -205,7 +205,7 @@ _thr_umtx_timedwait_uint(volatile u_int
> 	if (abstime != NULL) {
> 		clock_gettime(clockid, &ts);
> 		TIMESPEC_SUB(&ts2, abstime, &ts);
> -		if (ts2.tv_sec < 0 || ts2.tv_nsec <= 0)
> +		if (ts2.tv_sec < 0 || (ts2.tv_sec == 0 && ts2.tv_nsec <= 0))
> 			return (ETIMEDOUT);
> 		tsp = &ts2;
> 	} else {
>

Use timespeccmp()?  It is even likely to be faster, since it can do the
comparison in parallel, while the above has to wait for TIMESPEC_SUB()
before doing the comparison, unless the compiler is very smart.

However, I seem to have done too good a job of keeping kernel time* APIs
out of userland, so timespeccmp() is only available in the kernel, and
there are uglier but more correct unsafe macros like TIMESPEC_SUB()
macros in userland, and various kernel APIs escaped anyway, starting
with the NetBSD timeval ones, which escaped 10-15 years after timevals
should have gone away because they were superseded by timespecs.

Bruce



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120219214118.G1461>