svn commit: r215660 - user/davidxu/libthr/sys/kern
David Xu
davidxu at FreeBSD.org
Mon Nov 22 08:19:19 UTC 2010
Author: davidxu
Date: Mon Nov 22 08:19:18 2010
New Revision: 215660
URL: http://svn.freebsd.org/changeset/base/215660
Log:
Merge from r215652:
Use atomic instruction to set _has_writer, otherwise there is a race
causes userland to not wake up a thread sleeping in kernel.
Modified:
user/davidxu/libthr/sys/kern/kern_umtx.c
Modified: user/davidxu/libthr/sys/kern/kern_umtx.c
==============================================================================
--- user/davidxu/libthr/sys/kern/kern_umtx.c Mon Nov 22 07:17:27 2010 (r215659)
+++ user/davidxu/libthr/sys/kern/kern_umtx.c Mon Nov 22 08:19:18 2010 (r215660)
@@ -3565,9 +3565,8 @@ do_sem_wait(struct thread *td, struct _u
umtxq_insert(uq);
umtxq_unlock(&uq->uq_key);
- /* Don't modify cacheline when unnecessary. */
if (fuword32(__DEVOLATILE(uint32_t *, &sem->_has_waiters)) == 0)
- suword32(__DEVOLATILE(uint32_t *, &sem->_has_waiters), 1);
+ casuword32(__DEVOLATILE(uint32_t *, &sem->_has_waiters), 0, 1);
count = fuword32(__DEVOLATILE(uint32_t *, &sem->_count));
if (count != 0) {
More information about the svn-src-user
mailing list