From: Rémi Bernon rbernon@codeweavers.com
--- dlls/ntdll/unix/virtual.c | 102 +++++++++++++++++++------------------- 1 file changed, 51 insertions(+), 51 deletions(-)
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c index 4b4d9d6cd7f..9964f69cc06 100644 --- a/dlls/ntdll/unix/virtual.c +++ b/dlls/ntdll/unix/virtual.c @@ -4066,57 +4066,6 @@ TEB *virtual_alloc_first_teb(void) }
-/*********************************************************************** - * virtual_alloc_teb - */ -NTSTATUS virtual_alloc_teb( TEB **ret_teb ) -{ - sigset_t sigset; - TEB *teb; - void *ptr = NULL; - NTSTATUS status = STATUS_SUCCESS; - SIZE_T block_size = signal_stack_mask + 1; - - server_enter_uninterrupted_section( &virtual_mutex, &sigset ); - if (next_free_teb) - { - ptr = next_free_teb; - next_free_teb = *(void **)ptr; - memset( ptr, 0, teb_size ); - } - else - { - if (!teb_block_pos) - { - SIZE_T total = 32 * block_size; - - if ((status = NtAllocateVirtualMemory( NtCurrentProcess(), &ptr, user_space_wow_limit, - &total, MEM_RESERVE, PAGE_READWRITE ))) - { - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); - return status; - } - teb_block = ptr; - teb_block_pos = 32; - } - ptr = ((char *)teb_block + --teb_block_pos * block_size); - NtAllocateVirtualMemory( NtCurrentProcess(), (void **)&ptr, 0, &block_size, - MEM_COMMIT, PAGE_READWRITE ); - } - *ret_teb = teb = init_teb( ptr, is_wow64() ); - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); - - if ((status = signal_alloc_thread( teb ))) - { - server_enter_uninterrupted_section( &virtual_mutex, &sigset ); - *(void **)ptr = next_free_teb; - next_free_teb = ptr; - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); - } - return status; -} - - /*********************************************************************** * virtual_free_teb */ @@ -5099,6 +5048,57 @@ NTSTATUS WINAPI NtAllocateVirtualMemory( HANDLE process, PVOID *ret, ULONG_PTR z }
+/*********************************************************************** + * virtual_alloc_teb + */ +NTSTATUS virtual_alloc_teb( TEB **ret_teb ) +{ + sigset_t sigset; + TEB *teb; + void *ptr = NULL; + NTSTATUS status = STATUS_SUCCESS; + SIZE_T block_size = signal_stack_mask + 1; + + server_enter_uninterrupted_section( &virtual_mutex, &sigset ); + if (next_free_teb) + { + ptr = next_free_teb; + next_free_teb = *(void **)ptr; + memset( ptr, 0, teb_size ); + } + else + { + if (!teb_block_pos) + { + SIZE_T total = 32 * block_size; + + if ((status = NtAllocateVirtualMemory( NtCurrentProcess(), &ptr, user_space_wow_limit, + &total, MEM_RESERVE, PAGE_READWRITE ))) + { + server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + return status; + } + teb_block = ptr; + teb_block_pos = 32; + } + ptr = ((char *)teb_block + --teb_block_pos * block_size); + NtAllocateVirtualMemory( NtCurrentProcess(), (void **)&ptr, 0, &block_size, + MEM_COMMIT, PAGE_READWRITE ); + } + *ret_teb = teb = init_teb( ptr, is_wow64() ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + + if ((status = signal_alloc_thread( teb ))) + { + server_enter_uninterrupted_section( &virtual_mutex, &sigset ); + *(void **)ptr = next_free_teb; + next_free_teb = ptr; + server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + } + return status; +} + + static NTSTATUS get_extended_params( const MEM_EXTENDED_PARAMETER *parameters, ULONG count, ULONG_PTR *limit_low, ULONG_PTR *limit_high, ULONG_PTR *align, ULONG *attributes, USHORT *machine )