Module Name: src Committed By: riastradh Date: Fri Feb 11 21:40:59 UTC 2022
Modified Files: src/lib/libpthread: pthread_rwlock.c Log Message: libpthread: Fix membars around rwlocks. 1. After loading self->pt_rwlocked, membar_enter() must not be conditional on PTHREAD__ATOMIC_IS_MEMBAR because there is no atomic r/m/w operation here which could imply the acquire barrier. (This should maybe just be a load-acquire operation, but we don't have atomic_load_acquire in userland at the moment -- TBD.) 2. Before storing thread->pt_rwlocked, must issue membar_exit() so that this is a store-release operation -- except if we had just done an atomic r/m/w and PTHREAD__ATOMIC_IS_MEMBAR is set, in which case it can be elided. The second membar_exit() added here might be safely hoisted out of the loop but I'm not sure -- needs more analysis to prove that would be safe. To generate a diff of this commit: cvs rdiff -u -r1.42 -r1.43 src/lib/libpthread/pthread_rwlock.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.