From 1e2f40d01b14569bb831e39542320b69402b383f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Tue, 4 Jun 2019 10:10:46 +0200 Subject: [PATCH] Fixup the atomic code in pthread_rwlock branch of lib/isc/rwlock.c --- lib/isc/rwlock.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/isc/rwlock.c b/lib/isc/rwlock.c index d756d663ab..9ec64c9262 100644 --- a/lib/isc/rwlock.c +++ b/lib/isc/rwlock.c @@ -53,10 +53,10 @@ isc_rwlock_lock(isc_rwlock_t *rwl, isc_rwlocktype_t type) { while (true) { REQUIRE(pthread_rwlock_wrlock(&rwl->rwlock) == 0); /* Unlock if in middle of downgrade operation */ - if (atomic_load_release(&rwl->downgrade)) { + if (atomic_load_acquire(&rwl->downgrade)) { REQUIRE(pthread_rwlock_unlock(&rwl->rwlock) == 0); - while (atomic_load(&rwl->downgrade)); + while (atomic_load_acquire(&rwl->downgrade)); continue; } break; @@ -78,7 +78,7 @@ isc_rwlock_trylock(isc_rwlock_t *rwl, isc_rwlocktype_t type) { break; case isc_rwlocktype_write: ret = pthread_rwlock_trywrlock(&rwl->rwlock); - if ((ret == 0) && atomic_load(&rwl->downgrade)) { + if ((ret == 0) && atomic_load_acquire(&rwl->downgrade)) { isc_rwlock_unlock(rwl, type); return (ISC_R_LOCKBUSY); } @@ -104,15 +104,16 @@ isc_rwlock_unlock(isc_rwlock_t *rwl, isc_rwlocktype_t type) { isc_result_t isc_rwlock_tryupgrade(isc_rwlock_t *rwl) { + UNUSED(rwl); return (ISC_R_LOCKBUSY); } void isc_rwlock_downgrade(isc_rwlock_t *rwl) { - atomic_store_acquire(&rwl->downgrade, true); + atomic_store_release(&rwl->downgrade, true); isc_rwlock_unlock(rwl, isc_rwlocktype_write); isc_rwlock_lock(rwl, isc_rwlocktype_read); - atomic_store_acquire(&rwl->downgrade, false); + atomic_store_release(&rwl->downgrade, false); } void