Added patch to reduce stack usage of virtual memory functions.

This commit is contained in:
Sebastian Lackner
2015-09-26 23:38:49 +02:00
parent 2f4c5ae81e
commit f64d5ad94d
13 changed files with 740 additions and 51 deletions

View File

@@ -1,4 +1,4 @@
From c81fa97c5fc573dd3bc40dcee861ad7c70abc4d9 Mon Sep 17 00:00:00 2001
From e09548baea24d9965e2beafc251bb69443424b25 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sat, 3 Jan 2015 20:07:08 +0100
Subject: ntdll: Expose wine_uninterrupted_[read|write]_memory as exports.
@@ -12,10 +12,10 @@ Subject: ntdll: Expose wine_uninterrupted_[read|write]_memory as exports.
5 files changed, 34 insertions(+), 19 deletions(-)
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
index 9355d04..c13a555 100644
index ca3561d..52e7276 100644
--- a/dlls/ntdll/ntdll.spec
+++ b/dlls/ntdll/ntdll.spec
@@ -1430,6 +1430,10 @@
@@ -1463,6 +1463,10 @@
# signal handling
@ cdecl __wine_set_signal_handler(long ptr)
@@ -27,7 +27,7 @@ index 9355d04..c13a555 100644
@ cdecl wine_nt_to_unix_file_name(ptr ptr long long)
@ cdecl wine_unix_to_nt_file_name(ptr ptr)
diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h
index 674fcbc..79eea52 100644
index cbd19db..f5b5339 100644
--- a/dlls/ntdll/ntdll_misc.h
+++ b/dlls/ntdll/ntdll_misc.h
@@ -172,8 +172,6 @@ extern BOOL virtual_is_valid_code_address( const void *addr, SIZE_T size ) DECLS
@@ -75,10 +75,10 @@ index 5c3aa819..cf20483 100644
{
context->Ecx = stack[0];
diff --git a/dlls/ntdll/virtual.c b/dlls/ntdll/virtual.c
index e5bf705..4392c3e 100644
index 020a6c0..eb8893b 100644
--- a/dlls/ntdll/virtual.c
+++ b/dlls/ntdll/virtual.c
@@ -1672,13 +1672,14 @@ BOOL virtual_check_buffer_for_write( void *ptr, SIZE_T size )
@@ -1642,13 +1642,14 @@ BOOL virtual_check_buffer_for_write( void *ptr, SIZE_T size )
/***********************************************************************
@@ -95,8 +95,8 @@ index e5bf705..4392c3e 100644
+SIZE_T CDECL wine_uninterrupted_read_memory( const void *addr, void *buffer, SIZE_T size )
{
struct file_view *view;
sigset_t sigset;
@@ -1697,10 +1698,14 @@ SIZE_T virtual_uninterrupted_read_memory( const void *addr, void *buffer, SIZE_T
SIZE_T bytes_read = 0;
@@ -1666,10 +1667,14 @@ SIZE_T virtual_uninterrupted_read_memory( const void *addr, void *buffer, SIZE_T
while (bytes_read < size && (VIRTUAL_GetUnixProt( *p++ ) & PROT_READ))
{
SIZE_T block_size = min( size, page_size - ((UINT_PTR)addr & page_mask) );
@@ -114,7 +114,7 @@ index e5bf705..4392c3e 100644
bytes_read += block_size;
}
}
@@ -1711,13 +1716,14 @@ SIZE_T virtual_uninterrupted_read_memory( const void *addr, void *buffer, SIZE_T
@@ -1680,13 +1685,14 @@ SIZE_T virtual_uninterrupted_read_memory( const void *addr, void *buffer, SIZE_T
/***********************************************************************
@@ -131,8 +131,8 @@ index e5bf705..4392c3e 100644
+SIZE_T CDECL wine_uninterrupted_write_memory( void *addr, const void *buffer, SIZE_T size )
{
struct file_view *view;
sigset_t sigset;
@@ -1756,10 +1762,14 @@ SIZE_T virtual_uninterrupted_write_memory( void *addr, const void *buffer, SIZE_
SIZE_T bytes_written = 0;
@@ -1723,10 +1729,14 @@ SIZE_T virtual_uninterrupted_write_memory( void *addr, const void *buffer, SIZE_
}
block_size = min( size, page_size - ((UINT_PTR)addr & page_mask) );
@@ -151,10 +151,10 @@ index e5bf705..4392c3e 100644
}
}
diff --git a/include/winternl.h b/include/winternl.h
index 1a694da..02dda9a 100644
index 2b10f8d..bd7ba4e 100644
--- a/include/winternl.h
+++ b/include/winternl.h
@@ -2605,6 +2605,9 @@ NTSYSAPI NTSTATUS CDECL wine_nt_to_unix_file_name( const UNICODE_STRING *nameW,
@@ -2660,6 +2660,9 @@ NTSYSAPI NTSTATUS CDECL wine_nt_to_unix_file_name( const UNICODE_STRING *nameW,
UINT disposition, BOOLEAN check_case );
NTSYSAPI NTSTATUS CDECL wine_unix_to_nt_file_name( const ANSI_STRING *name, UNICODE_STRING *nt );
@@ -165,5 +165,5 @@ index 1a694da..02dda9a 100644
/***********************************************************************
* Inline functions
--
2.3.0
2.5.1

View File

@@ -1,4 +1,5 @@
Fixes: Avoid race-conditions of async WSARecv() operations with write watches.
Fixes: Avoid race-conditions with write watches in WS2_async_accept.
Fixes: Basic handling of write watches triggered while we're on the signal stack.
Depends: ntdll-Virtual_Memory_Stack
Category: stable