Date: Thu, 9 Feb 2017 13:32:20 +0000 (UTC) From: Mateusz Guzik <mjg@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r313472 - head/sys/kern Message-ID: <201702091332.v19DWKGW074830@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: mjg Date: Thu Feb 9 13:32:19 2017 New Revision: 313472 URL: https://svnweb.freebsd.org/changeset/base/313472 Log: rwlock: fix r313454 The runlock slow path would update wrong variable before restarting the loop, in effect corrupting the state. Reported by: pho Modified: head/sys/kern/kern_rwlock.c Modified: head/sys/kern/kern_rwlock.c ============================================================================== --- head/sys/kern/kern_rwlock.c Thu Feb 9 09:02:45 2017 (r313471) +++ head/sys/kern/kern_rwlock.c Thu Feb 9 13:32:19 2017 (r313472) @@ -755,7 +755,7 @@ __rw_runlock_hard(volatile uintptr_t *c, if (!atomic_cmpset_rel_ptr(&rw->rw_lock, RW_READERS_LOCK(1) | v, x)) { turnstile_chain_unlock(&rw->lock_object); - x = RW_READ_VALUE(rw); + v = RW_READ_VALUE(rw); continue; } if (LOCK_LOG_TEST(&rw->lock_object, 0))
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201702091332.v19DWKGW074830>