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
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"