1
0
mirror of https://git.FreeBSD.org/src.git synced 2025-01-05 12:56:08 +00:00
freebsd/lib/libthr/thread
Attilio Rao b13c5f2883 rwlock implemented from libthr need to fall through the 'hard path' and
query umtx also if the shared waiters bit is set on a shared lock.
The writer starvation avoidance technique, infact, can lead to shared
waiters on a shared lock which can bring to a missed wakeup and thus
to a deadlock if the right bit is not checked (a notable case is the
writers counterpart to be handled through expired timeouts).

Fix that by checking for the shared waiters bit also when unlocking the
shared locks.

That bug was causing a reported MySQL deadlock.
Many thanks go to Nick Esborn and his employer DesertNet which provided
time and machines to identify and fix this issue.

PR:		thread/135673
Reported by:	Nick Esborn <nick at desert dot net>
Tested by:	Nick Esborn <nick at desert dot net>
Reviewed by:	jeff
2009-09-23 21:38:57 +00:00
..
Makefile.inc Add POSIX pthread API pthread_getcpuclockid() to get a thread's cpu 2008-03-22 09:59:20 +00:00
thr_affinity.c Avoid various shadowed variables. libthr is now almost WARNS=4 clean except 2008-04-23 21:06:51 +00:00
thr_atfork.c Replace internal usage of struct umtx with umutex which can supports 2006-09-06 04:04:10 +00:00
thr_attr.c Avoid various shadowed variables. libthr is now almost WARNS=4 clean except 2008-04-23 21:06:51 +00:00
thr_autoinit.c
thr_barrier.c _thr_ucond_wait drops lock, we should pick it up again. 2006-12-05 23:46:11 +00:00
thr_barrierattr.c WARNS level 4 cleanup. 2006-04-04 02:57:49 +00:00
thr_cancel.c Tweak _thr_cancel_leave_defer a bit to fix a possible race. 2006-12-05 05:01:57 +00:00
thr_clean.c Make pthread_cleanup_push() and pthread_cleanup_pop() as a pair of macros, 2008-06-09 01:14:10 +00:00
thr_concurrency.c WARNS level 4 cleanup. 2006-04-04 02:57:49 +00:00
thr_cond.c Remove unused functions. 2008-04-02 08:33:42 +00:00
thr_condattr.c In function pthread_condattr_getpshared, store result correctly. 2008-08-01 01:21:49 +00:00
thr_create.c Use UMTX_OP_WAIT_UINT_PRIVATE and UMTX_OP_WAKE_PRIVATE to save 2008-04-29 03:58:18 +00:00
thr_detach.c WARNS level 4 cleanup. 2006-04-04 02:57:49 +00:00
thr_equal.c Remove 3rd clause, renumber, ok per email 2007-01-12 07:26:21 +00:00
thr_event.c Allow psaddr_t to be widened by using thr_pread_{int,long,ptr}, 2008-09-14 16:07:21 +00:00
thr_exit.c Move call to _malloc_thread_cleanup() so that if this is the last thread, 2008-09-09 17:14:32 +00:00
thr_fork.c These are some cosmetic changes to improve the clarity of libthr's fork implementation. 2009-05-11 16:45:53 +00:00
thr_getcpuclockid.c Add POSIX pthread API pthread_getcpuclockid() to get a thread's cpu 2008-03-22 09:59:20 +00:00
thr_getprio.c Remove 3rd clause, renumber, ok per email 2007-01-12 07:26:21 +00:00
thr_getschedparam.c use rtprio_thread system call to get or set thread priority. 2006-09-21 04:21:30 +00:00
thr_info.c If a thread who's name is being set is not the current thread, use macros 2007-04-05 07:20:31 +00:00
thr_init.c - Reduce function call overhead for uncontended case. 2008-05-29 07:57:33 +00:00
thr_join.c If a thread was detached, return EINVAL instead, the error code 2006-11-28 11:05:31 +00:00
thr_kern.c use rtprio_thread system call to get or set thread priority. 2006-09-21 04:21:30 +00:00
thr_kill.c Remove 3rd clause, renumber, ok per email 2007-01-12 07:26:21 +00:00
thr_list.c Eliminate atomic operations in thread cancellation functions, it should 2006-11-24 09:57:38 +00:00
thr_main_np.c WARNS level 4 cleanup. 2006-04-04 02:57:49 +00:00
thr_multi_np.c Remove 3rd clause, renumber, ok per email 2007-01-12 07:26:21 +00:00
thr_mutex.c Add two commands to _umtx_op system call to allow a simple mutex to be 2008-06-24 07:32:12 +00:00
thr_mutexattr.c pthread_mutexattr_destroy() was accidentally broken in last revision, 2008-03-20 11:47:08 +00:00
thr_once.c Eliminate global mutex by using pthread_once's state field as 2008-05-30 00:02:59 +00:00
thr_printf.c
thr_private.h Make pthread_cleanup_push() and pthread_cleanup_pop() as a pair of macros, 2008-06-09 01:14:10 +00:00
thr_pspinlock.c Reverse the logic of UP and SMP. 2007-10-16 07:36:02 +00:00
thr_resume_np.c Use UMTX_OP_WAIT_UINT_PRIVATE and UMTX_OP_WAKE_PRIVATE to save 2008-04-29 03:58:18 +00:00
thr_rtld.c In the current code, rdlock_count is not correctly handled for some cases. 2009-07-06 09:31:04 +00:00
thr_rwlock.c In the current code, rdlock_count is not correctly handled for some cases. 2009-07-06 09:31:04 +00:00
thr_rwlockattr.c WARNS level 4 cleanup. 2006-04-04 02:57:49 +00:00
thr_self.c Remove 3rd clause, renumber, ok per email 2007-01-12 07:26:21 +00:00
thr_sem.c Use UMTX_OP_WAIT_UINT_PRIVATE and UMTX_OP_WAKE_PRIVATE to save 2008-04-29 03:58:18 +00:00
thr_setprio.c Remove 3rd clause, renumber, ok per email 2007-01-12 07:26:21 +00:00
thr_setschedparam.c use rtprio_thread system call to get or set thread priority. 2006-09-21 04:21:30 +00:00
thr_sig.c Use UMTX_OP_WAIT_UINT_PRIVATE and UMTX_OP_WAKE_PRIVATE to save 2008-04-29 03:58:18 +00:00
thr_single_np.c Remove 3rd clause, renumber, ok per email 2007-01-12 07:26:21 +00:00
thr_spec.c In _pthread_key_create() ensure that libthr is initialized. This 2007-11-06 21:50:43 +00:00
thr_spinlock.c Avoid various shadowed variables. libthr is now almost WARNS=4 clean except 2008-04-23 21:06:51 +00:00
thr_stack.c WARNS level 4 cleanup. 2006-04-04 02:57:49 +00:00
thr_suspend_np.c Use UMTX_OP_WAIT_UINT_PRIVATE and UMTX_OP_WAKE_PRIVATE to save 2008-04-29 03:58:18 +00:00
thr_switch_np.c WARNS level 4 cleanup. 2006-04-04 02:57:49 +00:00
thr_symbols.c Remove 3rd clause, renumber, ok per email 2007-01-12 07:26:21 +00:00
thr_syscalls.c Don't ignore other fcntl functions, directly call __sys_fcntl if 2009-03-09 05:54:43 +00:00
thr_umtx.c Add two commands to _umtx_op system call to allow a simple mutex to be 2008-06-24 07:32:12 +00:00
thr_umtx.h rwlock implemented from libthr need to fall through the 'hard path' and 2009-09-23 21:38:57 +00:00
thr_yield.c Remove 3rd clause, renumber, ok per email 2007-01-12 07:26:21 +00:00