Date: Thu, 17 Nov 2011 00:54:37 +0100 From: Jilles Tjoelker <jilles@stack.nl> To: freebsd-threads@freebsd.org Subject: [patch] Fix pthread_cond_timedwait() in realtime thread or with PI or PP mutex Message-ID: <20111116235437.GA31850@stack.nl>
next in thread | raw e-mail | index | archive | help
As reported in PR 162403, pthread_cond_timedwait()'s timeout is broken if the kernel condition variable is used (that means, when it is called from a thread with realtime priority or with a priority-inherit or priority-protect mutex; process-shared mutexes and condition variables do not currently work). The below patch appears to work in my testing and for the PR submitter. I would like to see this in 9.0, if possible. Index: lib/libthr/thread/thr_umtx.c =================================================================== --- lib/libthr/thread/thr_umtx.c (revision 226880) +++ lib/libthr/thread/thr_umtx.c (working copy) @@ -231,7 +231,7 @@ int _thr_ucond_wait(struct ucond *cv, struct umutex *m, - const struct timespec *timeout, int check_unparking) + const struct timespec *timeout, int flags) { if (timeout && (timeout->tv_sec < 0 || (timeout->tv_sec == 0 && timeout->tv_nsec <= 0))) { @@ -240,7 +240,7 @@ return (ETIMEDOUT); } return _umtx_op_err(cv, UMTX_OP_CV_WAIT, - check_unparking ? UMTX_CHECK_UNPARKING : 0, + flags, m, __DECONST(void*, timeout)); } Index: lib/libthr/thread/thr_umtx.h =================================================================== --- lib/libthr/thread/thr_umtx.h (revision 226880) +++ lib/libthr/thread/thr_umtx.h (working copy) @@ -55,7 +55,7 @@ const struct timespec *timeout, int shared) __hidden; int _thr_umtx_wake(volatile void *mtx, int count, int shared) __hidden; int _thr_ucond_wait(struct ucond *cv, struct umutex *m, - const struct timespec *timeout, int check_unpaking) __hidden; + const struct timespec *timeout, int flags) __hidden; void _thr_ucond_init(struct ucond *cv) __hidden; int _thr_ucond_signal(struct ucond *cv) __hidden; int _thr_ucond_broadcast(struct ucond *cv) __hidden; -- Jilles Tjoelker
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20111116235437.GA31850>