aboutsummaryrefslogtreecommitdiff
path: root/src/core/ngx_rwlock.c
diff options
context:
space:
mode:
authorSergey Kandaurov <pluknet@nginx.com>2022-01-25 23:42:48 +0300
committerSergey Kandaurov <pluknet@nginx.com>2022-01-25 23:42:48 +0300
commit025fa0374ee9604e39e0ee97fc1cdd425043ea5f (patch)
tree291367a91145f157826cc2cb00e413ef47884b39 /src/core/ngx_rwlock.c
parent264dd955cb81dff66908556b5ed8ebbd5cac8ef8 (diff)
parent60ca13f98846bb1140359972d42276db88f4a409 (diff)
downloadnginx-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.c18
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);
}
}