Date: Mon, 19 Mar 2012 08:33:27 +0100 From: Pawel Jakub Dawidek <pjd@FreeBSD.org> To: Julian Elischer <julian@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: <20120319073326.GO1340@garage.freebsd.pl> In-Reply-To: <4F668422.1000308@freebsd.org> References: <201202271338.q1RDcqEQ020033@svn.freebsd.org> <20120318185014.GK1340@garage.freebsd.pl> <4F668422.1000308@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--51uid+Ur/3ko9cBW Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Sun, Mar 18, 2012 at 05:56:02PM -0700, Julian Elischer wrote: > 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 ke= rnel, > >> 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 +=3D 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. >=20 > this has been broken for a while for me in fact fixing this was, I=20 > thought, > one of the reasons for this work.. glad I'm not the omnly person=20 > seeing it though. >=20 > for me it broke sysutils/fio from ports For me it breaks sbin/hastd and openbsm/auditdistd, but my feeling is that it is was broken recently. This stuff use to work not so long ago. --=20 Pawel Jakub Dawidek http://www.wheelsystems.com FreeBSD committer http://www.FreeBSD.org Am I Evil? Yes, I Am! http://tupytaj.pl --51uid+Ur/3ko9cBW Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.18 (FreeBSD) iEYEARECAAYFAk9m4UYACgkQForvXbEpPzT6VACg4ewdSsdfVGV7ElrQOBN00DJN IlUAoPpQpanzfis+qv9uuedFnB6wtyza =eyen -----END PGP SIGNATURE----- --51uid+Ur/3ko9cBW--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120319073326.GO1340>