summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/mmap.cc
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2004-07-16 14:32:03 +0000
committerCorinna Vinschen <corinna@vinschen.de>2004-07-16 14:32:03 +0000
commite348b39a719c81dce44594c56daf00cc71a0f55b (patch)
treee42998acdef198d5bff6dbde208fdfb192dd21ce /winsup/cygwin/mmap.cc
parent99d86313f4b339be9abf747439356d717730ff61 (diff)
downloadcygnal-e348b39a719c81dce44594c56daf00cc71a0f55b.tar.gz
cygnal-e348b39a719c81dce44594c56daf00cc71a0f55b.tar.bz2
cygnal-e348b39a719c81dce44594c56daf00cc71a0f55b.zip
* mmap.cc (mmap_record::alloc_page_map): Mark pages as allocated even
on Windows 9x, FWIW.
Diffstat (limited to 'winsup/cygwin/mmap.cc')
-rw-r--r--winsup/cygwin/mmap.cc23
1 files changed, 13 insertions, 10 deletions
diff --git a/winsup/cygwin/mmap.cc b/winsup/cygwin/mmap.cc
index 16611480c..ebca63d59 100644
--- a/winsup/cygwin/mmap.cc
+++ b/winsup/cygwin/mmap.cc
@@ -168,26 +168,29 @@ mmap_record::alloc_page_map (_off64_t off, DWORD len)
sizeof (DWORD))))
return false;
+ off -= offset_;
+ len = PAGE_CNT (len);
+
if (wincap.virtual_protect_works_on_shared_pages ())
{
DWORD old_prot;
+ DWORD vlen = len * getpagesize ();
- off -= offset_;
- len = PAGE_CNT (len) * getpagesize ();
if (off > 0 &&
!VirtualProtect (base_address_, off, PAGE_NOACCESS, &old_prot))
syscall_printf ("VirtualProtect(%x,%D) failed: %E", base_address_, off);
- if (off + len < size_to_map_
- && !VirtualProtect (base_address_ + off + len,
- size_to_map_ - len - off,
+ if (off + vlen < size_to_map_
+ && !VirtualProtect (base_address_ + off + vlen,
+ size_to_map_ - vlen - off,
PAGE_NOACCESS, &old_prot))
syscall_printf ("VirtualProtect(%x,%D) failed: %E",
- base_address_ + off + len, size_to_map_ - len - off);
- off /= getpagesize ();
- len /= getpagesize ();
- while (len-- > 0)
- MAP_SET (off + len);
+ base_address_ + off + vlen, size_to_map_ - vlen - off);
}
+
+ off /= getpagesize ();
+
+ while (len-- > 0)
+ MAP_SET (off + len);
return true;
}