summaryrefslogtreecommitdiff
path: root/libpager
diff options
context:
space:
mode:
authorMichael I. Bushnell <mib@gnu.org>1996-03-26 21:02:50 +0000
committerMichael I. Bushnell <mib@gnu.org>1996-03-26 21:02:50 +0000
commitf43ec146519d9362b870b6c1d4c8931e19149bc2 (patch)
treee77aa90baff732ad1f5266be273a4be627f51afa /libpager
parent7681999a97a90ad386b06a47b1336734c0d3af99 (diff)
(_pager_do_write_request): Delete any corresponding anticipation
before starting pageout.
Diffstat (limited to 'libpager')
-rw-r--r--libpager/data-return.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/libpager/data-return.c b/libpager/data-return.c
index 709f9de2..5d64fe41 100644
--- a/libpager/data-return.c
+++ b/libpager/data-return.c
@@ -45,6 +45,7 @@ _pager_do_write_request (mach_port_t object,
struct lock_list *next;} *lock_list, *ll;
int wakeup;
int omitdata = 0;
+ struct anticipation *ant;
p = ports_lookup_port (0, object, _pager_class);
if (!p)
@@ -86,6 +87,13 @@ _pager_do_write_request (mach_port_t object,
_pager_block_termination (p); /* until we are done with the pagemap
when the write completes. */
+ ant = _pager_check_anticitpations (p, length, offset);
+ if (ant)
+ {
+ vm_deallocate (mach_task_self (), ant->address, ant->length);
+ free (ant);
+ }
+
_pager_pagemap_resize (p, offset + length);
pm_entries = &p->pagemap[offset / __vm_page_size];