summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordavide <davide@FreeBSD.org>2013-09-22 14:09:07 +0000
committerdavide <davide@FreeBSD.org>2013-09-22 14:09:07 +0000
commit30f0365ae9f2024c5ae68ffcb5370d12d1facc13 (patch)
tree3ccb159f2a34373ecfd9941d76d59a4e3c4b443d
parent12fb397079ae31a26be56507235df63d4f0ef5a3 (diff)
downloadFreeBSD-src-30f0365ae9f2024c5ae68ffcb5370d12d1facc13.zip
FreeBSD-src-30f0365ae9f2024c5ae68ffcb5370d12d1facc13.tar.gz
Consistently use the same value to indicate exclusively-held and
shared-held locks for all the primitives in lc_lock/lc_unlock routines. This fixes the problems introduced in r255747, which indeed introduced an inversion in the logic. Reported by: many Tested by: bdrewery, pho, lme, Adam McDougall, O. Hartmann Approved by: re (glebius)
-rw-r--r--sys/kern/kern_rwlock.c8
-rw-r--r--sys/kern/kern_sx.c8
2 files changed, 8 insertions, 8 deletions
diff --git a/sys/kern/kern_rwlock.c b/sys/kern/kern_rwlock.c
index 45993f2..7b1e6bf 100644
--- a/sys/kern/kern_rwlock.c
+++ b/sys/kern/kern_rwlock.c
@@ -147,9 +147,9 @@ lock_rw(struct lock_object *lock, uintptr_t how)
rw = (struct rwlock *)lock;
if (how)
- rw_wlock(rw);
- else
rw_rlock(rw);
+ else
+ rw_wlock(rw);
}
uintptr_t
@@ -161,10 +161,10 @@ unlock_rw(struct lock_object *lock)
rw_assert(rw, RA_LOCKED | LA_NOTRECURSED);
if (rw->rw_lock & RW_LOCK_READ) {
rw_runlock(rw);
- return (0);
+ return (1);
} else {
rw_wunlock(rw);
- return (1);
+ return (0);
}
}
diff --git a/sys/kern/kern_sx.c b/sys/kern/kern_sx.c
index fd9a51f..a1fc36a 100644
--- a/sys/kern/kern_sx.c
+++ b/sys/kern/kern_sx.c
@@ -162,9 +162,9 @@ lock_sx(struct lock_object *lock, uintptr_t how)
sx = (struct sx *)lock;
if (how)
- sx_xlock(sx);
- else
sx_slock(sx);
+ else
+ sx_xlock(sx);
}
uintptr_t
@@ -176,10 +176,10 @@ unlock_sx(struct lock_object *lock)
sx_assert(sx, SA_LOCKED | SA_NOTRECURSED);
if (sx_xlocked(sx)) {
sx_xunlock(sx);
- return (1);
+ return (0);
} else {
sx_sunlock(sx);
- return (0);
+ return (1);
}
}
OpenPOWER on IntegriCloud