[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
pager
From: |
Alfred M. Szmidt |
Subject: |
pager |
Date: |
Fri, 03 Dec 2004 10:28:35 +0100 |
Following looks correct to me. OK to commit?
Summary: libpager/data-request.c: missing call to
_pager_allow_termination; elide unlock relock sequence in the fast
path
Original Submission: Please see the discussion here:
http://lists.gnu.org/archive/html/bug-hurd/2004-09/msg00229.html
I am happy with this patch. This just needs approval from,
e.g. Roland. I have added this to the savannah patch manager so that
it will not get lost.
Thanks,
Neal
2004-09-28 Neal H. Walfield <neal@cs.uml.edu>
Ognyan Kulev <ogi@fmi.uni-sofia.bg>
* data-request.c (_pager_seqnos_memory_object_data_request):
Elide gratuitous mutex_unlock, mutex_lock sequence.
When _pager_pagemap_resize fails, clean up correctly.
Index: data-request.c
===================================================================
RCS file: /cvsroot/hurd/hurd/libpager/data-request.c,v
retrieving revision 1.22
diff -u -p -r1.22 data-request.c
--- data-request.c 8 May 2002 09:22:14 -0000 1.22
+++ data-request.c 28 Sep 2004 15:03:43 -0000
@@ -68,13 +68,16 @@ _pager_seqnos_memory_object_data_request
{
printf ("pager in wrong state for read\n");
_pager_release_seqno (p, seqno);
- mutex_unlock (&p->interlock);
goto allow_term_out;
}
err = _pager_pagemap_resize (p, offset + length);
if (err)
- goto release_out; /* Can't do much about the actual error. */
+ {
+ /* Can't do much about the actual error. */
+ _pager_release_seqno (p, seqno);
+ goto allow_term_out;
+ }
/* 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
@@ -109,10 +112,12 @@ _pager_seqnos_memory_object_data_request
/* Let someone else in. */
_pager_release_seqno (p, seqno);
- mutex_unlock (&p->interlock);
if (!doread)
goto allow_term_out;
+
+ mutex_unlock (&p->interlock);
+
if (doerror)
goto error_read;
@@ -133,8 +138,8 @@ _pager_seqnos_memory_object_data_request
error_read:
memory_object_data_error (p->memobjcntl, offset, length, EIO);
_pager_mark_object_error (p, offset, length, EIO);
- allow_term_out:
mutex_lock (&p->interlock);
+ allow_term_out:
_pager_allow_termination (p);
mutex_unlock (&p->interlock);
ports_port_deref (p);
- pager,
Alfred M. Szmidt <=