Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 18 Mar 2012 17:56:02 -0700
From:      Julian Elischer <julian@freebsd.org>
To:        Pawel Jakub Dawidek <pjd@freebsd.org>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, David Xu <davidxu@freebsd.org>
Subject:   Re: svn commit: r232209 - in head: lib/libthr/thread sys/kern
Message-ID:  <4F668422.1000308@freebsd.org>
In-Reply-To: <20120318185014.GK1340@garage.freebsd.pl>
References:  <201202271338.q1RDcqEQ020033@svn.freebsd.org> <20120318185014.GK1340@garage.freebsd.pl>

next in thread | previous in thread | raw e-mail | index | archive | help
On 3/18/12 11:50 AM, Pawel Jakub Dawidek wrote:
> On Mon, Feb 27, 2012 at 01:38:52PM +0000, David Xu wrote:
>> Author: davidxu
>> Date: Mon Feb 27 13:38:52 2012
>> New Revision: 232209
>> URL: http://svn.freebsd.org/changeset/base/232209
>>
>> Log:
>>    Follow changes made in revision 232144, pass absolute timeout to kernel,
>>    this eliminates a clock_gettime() syscall.
> This or some other change has broken CLOCK_MONOTONIC usage with
> condition variables.
>
> You should be able to reproduce this by something like this:
>
> 	pthread_cond_t cv;
> 	pthread_condattr_t attr;
> 	pthread_mutex_t lock;
> 	struct timespec ts;
>          int error;
>
> 	(void)pthread_mutex_init(&lock, NULL);
>
> 	(void)pthread_condattr_init(&attr);
> 	(void)pthread_condattr_setclock(&attr, CLOCK_MONOTONIC);
>
> 	(void)pthread_cond_init(&cv,&attr);
> 	(void)pthread_condattr_destroy(&attr);
>
> 	(void)clock_gettime(CLOCK_MONOTONIC,&ts);
> 	ts.tv_sec += 10;
> 	(void)pthread_mutex_lock(&lock);
> 	(void)pthread_cond_timedwait(&cv,&lock,&ts);
> 	(void)pthread_mutex_unlock(&lock);
>
> This should timeout after 10 seconds, but pthread_cond_timedwait(3)
> returns immediately with ETIMEDOUT. CLOCK_REALTIME works properly.
> Bascially pthread_condattr_setclock(&attr, CLOCK_MONOTONIC) is no-op.
> If you change CLOCK_MONOTONIC to CLOCK_REALTIME in clock_gettime(2)
> call, it will timeout after 10 seconds.

this has been broken for  a while for  me in fact fixing this was, I 
thought,
one of the reasons for this work..  glad I'm not the omnly person 
seeing it though.

for me it broke sysutils/fio  from ports





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