diff options
-rw-r--r-- | libpager/lock-completed.c | 16 |
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); |