diff options
author | Sergey Kandaurov <pluknet@nginx.com> | 2022-01-25 23:42:48 +0300 |
---|---|---|
committer | Sergey Kandaurov <pluknet@nginx.com> | 2022-01-25 23:42:48 +0300 |
commit | 025fa0374ee9604e39e0ee97fc1cdd425043ea5f (patch) | |
tree | 291367a91145f157826cc2cb00e413ef47884b39 /src/core/ngx_rwlock.c | |
parent | 264dd955cb81dff66908556b5ed8ebbd5cac8ef8 (diff) | |
parent | 60ca13f98846bb1140359972d42276db88f4a409 (diff) | |
download | nginx-025fa0374ee9604e39e0ee97fc1cdd425043ea5f.tar.gz nginx-025fa0374ee9604e39e0ee97fc1cdd425043ea5f.zip |
Merged with the default branch.
Diffstat (limited to 'src/core/ngx_rwlock.c')
-rw-r--r-- | src/core/ngx_rwlock.c | 18 |
1 files changed, 3 insertions, 15 deletions
diff --git a/src/core/ngx_rwlock.c b/src/core/ngx_rwlock.c index ed2b0f810..e7da8a8ec 100644 --- a/src/core/ngx_rwlock.c +++ b/src/core/ngx_rwlock.c @@ -89,22 +89,10 @@ ngx_rwlock_rlock(ngx_atomic_t *lock) void ngx_rwlock_unlock(ngx_atomic_t *lock) { - ngx_atomic_uint_t readers; - - readers = *lock; - - if (readers == NGX_RWLOCK_WLOCK) { + if (*lock == NGX_RWLOCK_WLOCK) { (void) ngx_atomic_cmp_set(lock, NGX_RWLOCK_WLOCK, 0); - return; - } - - for ( ;; ) { - - if (ngx_atomic_cmp_set(lock, readers, readers - 1)) { - return; - } - - readers = *lock; + } else { + (void) ngx_atomic_fetch_add(lock, -1); } } |