summaryrefslogtreecommitdiff
path: root/libpager/data-request.c
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2010-03-21 23:20:35 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2010-03-21 23:20:35 +0100
commit7913beaef3e6a2c4f7f315a8db7a31dbe1f713e0 (patch)
treebcdc14258df557a619b7607f95564ad1641c7ff2 /libpager/data-request.c
parent05367cedf498dfe9f061c5d9821a7f05eb501143 (diff)
Fix allowing termination on some error path
* libpager/data-request.c (_pager_seqnos_memory_object_data_request): when _pager_pagemap_resize returns an error, instead of goto release_out, goto new label allow_release_out thats calls _pager_allow_termination before proceeding with release_out.
Diffstat (limited to 'libpager/data-request.c')
-rw-r--r--libpager/data-request.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/libpager/data-request.c b/libpager/data-request.c
index f5bbfb5b..2bd80b9e 100644
--- a/libpager/data-request.c
+++ b/libpager/data-request.c
@@ -74,7 +74,7 @@ _pager_seqnos_memory_object_data_request (mach_port_t object,
err = _pager_pagemap_resize (p, offset + length);
if (err)
- goto release_out; /* Can't do much about the actual error. */
+ goto allow_release_out; /* Can't do much about the actual error. */
/* If someone is paging this out right now, the disk contents are
unreliable, so we have to wait. It is too expensive (right now) to
@@ -140,6 +140,8 @@ _pager_seqnos_memory_object_data_request (mach_port_t object,
ports_port_deref (p);
return 0;
+ allow_release_out:
+ _pager_allow_termination (p);
release_out:
_pager_release_seqno (p, seqno);
mutex_unlock (&p->interlock);