summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2012-09-23 00:04:06 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2012-09-23 00:04:06 +0200
commit901c61a1d25e7c8963e51012760a82730eda1910 (patch)
treec8d75f7a818ac4301112a5c17444b2a634fb2dea
parent0931a9f15e7436346e33c66129f3ff822c33f52a (diff)
Fix pager deadlock
http://lists.gnu.org/archive/html/bug-hurd/2010-03/msg00127.html * libpager/lock-object.c (_pager_lock_object): Release interlock before calling memory_object_lock_request, to let the callbacks take it.
-rw-r--r--libpager/lock-object.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/libpager/lock-object.c b/libpager/lock-object.c
index d108666e..d8d4a1b7 100644
--- a/libpager/lock-object.c
+++ b/libpager/lock-object.c
@@ -65,9 +65,11 @@ _pager_lock_object (struct pager *p,
}
}
+ mutex_unlock (&p->interlock);
memory_object_lock_request (p->memobjcntl, offset, size, should_return,
should_flush, lock_value,
sync ? p->port.port_right : MACH_PORT_NULL);
+ mutex_lock (&p->interlock);
if (sync)
{