mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-03-03 13:35:46 +08:00
* mmap.cc (mlock): Drop requesting SE_LOCK_MEMORY_PRIVILEGE. Drop
outdated comment. Call NtLockVirtualMemory with LOCK_VM_IN_WSL flag. (munlock): Drop requesting SE_LOCK_MEMORY_PRIVILEGE. Call NtUnlockVirtualMemory with LOCK_VM_IN_WSL flag.
This commit is contained in:
parent
b9aa81491f
commit
447354e13c
@ -1,3 +1,10 @@
|
|||||||
|
2011-12-03 Corinna Vinschen <vinschen@redhat.com>
|
||||||
|
|
||||||
|
* mmap.cc (mlock): Drop requesting SE_LOCK_MEMORY_PRIVILEGE. Drop
|
||||||
|
outdated comment. Call NtLockVirtualMemory with LOCK_VM_IN_WSL flag.
|
||||||
|
(munlock): Drop requesting SE_LOCK_MEMORY_PRIVILEGE. Call
|
||||||
|
NtUnlockVirtualMemory with LOCK_VM_IN_WSL flag.
|
||||||
|
|
||||||
2011-12-03 Christopher Faylor <me.cygwin2011@cgf.cx>
|
2011-12-03 Christopher Faylor <me.cygwin2011@cgf.cx>
|
||||||
|
|
||||||
Throughout, remove extra space after function name from debugging
|
Throughout, remove extra space after function name from debugging
|
||||||
|
@ -1346,14 +1346,6 @@ mlock (const void *addr, size_t len)
|
|||||||
{
|
{
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
/* Instead of using VirtualLock, which does not guarantee that the pages
|
|
||||||
aren't swapped out when the process is inactive, we're using
|
|
||||||
ZwLockVirtualMemory with the LOCK_VM_IN_RAM flag to do what mlock on
|
|
||||||
POSIX systems does. On NT, this requires SeLockMemoryPrivilege,
|
|
||||||
which is given only to SYSTEM by default. */
|
|
||||||
|
|
||||||
push_thread_privilege (SE_LOCK_MEMORY_PRIVILEGE, true);
|
|
||||||
|
|
||||||
/* Align address and length values to page size. */
|
/* Align address and length values to page size. */
|
||||||
size_t pagesize = getpagesize ();
|
size_t pagesize = getpagesize ();
|
||||||
PVOID base = (PVOID) rounddown((uintptr_t) addr, pagesize);
|
PVOID base = (PVOID) rounddown((uintptr_t) addr, pagesize);
|
||||||
@ -1362,7 +1354,7 @@ mlock (const void *addr, size_t len)
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
status = NtLockVirtualMemory (NtCurrentProcess (), &base, &size,
|
status = NtLockVirtualMemory (NtCurrentProcess (), &base, &size,
|
||||||
LOCK_VM_IN_RAM);
|
LOCK_VM_IN_WSL);
|
||||||
if (status == STATUS_WORKING_SET_QUOTA)
|
if (status == STATUS_WORKING_SET_QUOTA)
|
||||||
{
|
{
|
||||||
/* The working set is too small, try to increase it so that the
|
/* The working set is too small, try to increase it so that the
|
||||||
@ -1402,8 +1394,6 @@ mlock (const void *addr, size_t len)
|
|||||||
}
|
}
|
||||||
while (status == STATUS_WORKING_SET_QUOTA);
|
while (status == STATUS_WORKING_SET_QUOTA);
|
||||||
|
|
||||||
pop_thread_privilege ();
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1412,21 +1402,17 @@ munlock (const void *addr, size_t len)
|
|||||||
{
|
{
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
push_thread_privilege (SE_LOCK_MEMORY_PRIVILEGE, true);
|
|
||||||
|
|
||||||
/* Align address and length values to page size. */
|
/* Align address and length values to page size. */
|
||||||
size_t pagesize = getpagesize ();
|
size_t pagesize = getpagesize ();
|
||||||
PVOID base = (PVOID) rounddown((uintptr_t) addr, pagesize);
|
PVOID base = (PVOID) rounddown((uintptr_t) addr, pagesize);
|
||||||
ULONG size = roundup2 (((uintptr_t) addr - (uintptr_t) base) + len, pagesize);
|
ULONG size = roundup2 (((uintptr_t) addr - (uintptr_t) base) + len, pagesize);
|
||||||
NTSTATUS status = NtUnlockVirtualMemory (NtCurrentProcess (), &base, &size,
|
NTSTATUS status = NtUnlockVirtualMemory (NtCurrentProcess (), &base, &size,
|
||||||
LOCK_VM_IN_RAM);
|
LOCK_VM_IN_WSL);
|
||||||
if (!NT_SUCCESS (status))
|
if (!NT_SUCCESS (status))
|
||||||
__seterrno_from_nt_status (status);
|
__seterrno_from_nt_status (status);
|
||||||
else
|
else
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
pop_thread_privilege ();
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user