summaryrefslogtreecommitdiff
path: root/libpager/lock-completed.c
diff options
context:
space:
mode:
Diffstat (limited to 'libpager/lock-completed.c')
-rw-r--r--libpager/lock-completed.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/libpager/lock-completed.c b/libpager/lock-completed.c
index 8a02d356..a83badd8 100644
--- a/libpager/lock-completed.c
+++ b/libpager/lock-completed.c
@@ -52,12 +52,16 @@ _pager_seqnos_memory_object_lock_completed (mach_port_t object,
_pager_wait_for_seqno (p, seqno);
for (lr = p->lock_requests; lr; lr = lr->next)
- if (lr->start == offset && lr->end == offset + length
- && !--lr->locks_pending && !lr->pending_writes)
- break;
-
- if (lr)
- condition_broadcast (&p->wakeup);
+ if (lr->start == offset && lr->end == offset + length)
+ {
+ if (lr->locks_pending)
+ {
+ --lr->locks_pending;
+ }
+ if (!lr->locks_pending && !lr->pending_writes)
+ condition_broadcast (&p->wakeup);
+ break;
+ }
_pager_release_seqno (p, seqno);
mutex_unlock (&p->interlock);