From: Rémi Bernon rbernon@codeweavers.com
--- dlls/ntdll/unix/server.c | 8 ++-- dlls/ntdll/unix/signal_i386.c | 6 +-- dlls/ntdll/unix/signal_x86_64.c | 6 +-- dlls/ntdll/unix/sync.c | 2 +- dlls/ntdll/unix/unix_private.h | 2 +- dlls/ntdll/unix/virtual.c | 78 ++++++++++++++++----------------- 6 files changed, 51 insertions(+), 51 deletions(-)
diff --git a/dlls/ntdll/unix/server.c b/dlls/ntdll/unix/server.c index 349d99fefe3..53308fb4c8c 100644 --- a/dlls/ntdll/unix/server.c +++ b/dlls/ntdll/unix/server.c @@ -336,7 +336,7 @@ void server_enter_uninterrupted_section( pthread_mutex_t *mutex, sigset_t *sigse /*********************************************************************** * server_leave_uninterrupted_section */ -void server_leave_uninterrupted_section( pthread_mutex_t *mutex, sigset_t *sigset ) +void server_leave_uninterrupted_section( pthread_mutex_t *mutex, sigset_t *sigset, NTSTATUS status ) { mutex_unlock( mutex ); pthread_sigmask( SIG_SETMASK, sigset, NULL ); @@ -1172,7 +1172,7 @@ int server_get_unix_fd( HANDLE handle, unsigned int wanted_access, int *unix_fd, } SERVER_END_REQ; } - server_leave_uninterrupted_section( &fd_cache_mutex, &sigset ); + server_leave_uninterrupted_section( &fd_cache_mutex, &sigset, ret );
done: if (!ret && ((access & wanted_access) != wanted_access)) @@ -1856,7 +1856,7 @@ NTSTATUS WINAPI NtDuplicateObject( HANDLE source_process, HANDLE source, HANDLE } SERVER_END_REQ;
- server_leave_uninterrupted_section( &fd_cache_mutex, &sigset ); + server_leave_uninterrupted_section( &fd_cache_mutex, &sigset, ret );
if (fd != -1) close( fd ); return ret; @@ -1918,7 +1918,7 @@ NTSTATUS WINAPI NtClose( HANDLE handle ) } SERVER_END_REQ;
- server_leave_uninterrupted_section( &fd_cache_mutex, &sigset ); + server_leave_uninterrupted_section( &fd_cache_mutex, &sigset, ret );
if (fd != -1) close( fd );
diff --git a/dlls/ntdll/unix/signal_i386.c b/dlls/ntdll/unix/signal_i386.c index db72829bd1f..5a6a1438d80 100644 --- a/dlls/ntdll/unix/signal_i386.c +++ b/dlls/ntdll/unix/signal_i386.c @@ -2365,7 +2365,7 @@ NTSTATUS WINAPI NtSetLdtEntries( ULONG sel1, LDT_ENTRY entry1, ULONG sel2, LDT_E server_enter_uninterrupted_section( &ldt_mutex, &sigset ); if (sel1) ldt_set_entry( sel1, entry1 ); if (sel2) ldt_set_entry( sel2, entry2 ); - server_leave_uninterrupted_section( &ldt_mutex, &sigset ); + server_leave_uninterrupted_section( &ldt_mutex, &sigset, STATUS_SUCCESS ); return STATUS_SUCCESS; }
@@ -2424,7 +2424,7 @@ NTSTATUS signal_alloc_thread( TEB *teb ) ldt_set_entry( (idx << 3) | 7, entry ); break; } - server_leave_uninterrupted_section( &ldt_mutex, &sigset ); + server_leave_uninterrupted_section( &ldt_mutex, &sigset, STATUS_SUCCESS ); if (idx == LDT_SIZE) return STATUS_TOO_MANY_THREADS; } thread_data->fs = (idx << 3) | 7; @@ -2449,7 +2449,7 @@ void signal_free_thread( TEB *teb )
server_enter_uninterrupted_section( &ldt_mutex, &sigset ); __wine_ldt_copy.flags[thread_data->fs >> 3] = 0; - server_leave_uninterrupted_section( &ldt_mutex, &sigset ); + server_leave_uninterrupted_section( &ldt_mutex, &sigset, STATUS_SUCCESS ); }
diff --git a/dlls/ntdll/unix/signal_x86_64.c b/dlls/ntdll/unix/signal_x86_64.c index f55726801c7..040868615af 100644 --- a/dlls/ntdll/unix/signal_x86_64.c +++ b/dlls/ntdll/unix/signal_x86_64.c @@ -489,7 +489,7 @@ void set_process_instrumentation_callback( void *callback ) old = InterlockedExchangePointer( &instrumentation_callback, callback ); if (!old && callback) InterlockedExchangePointer( ptr, __wine_syscall_dispatcher_instrumentation ); else if (old && !callback) InterlockedExchangePointer( ptr, __wine_syscall_dispatcher ); - server_leave_uninterrupted_section( &instrumentation_callback_mutex, &sigset ); + server_leave_uninterrupted_section( &instrumentation_callback_mutex, &sigset, STATUS_SUCCESS ); }
struct xcontext @@ -2562,7 +2562,7 @@ NTSTATUS signal_alloc_thread( TEB *teb ) ldt_set_entry( (idx << 3) | 7, entry ); break; } - server_leave_uninterrupted_section( &ldt_mutex, &sigset ); + server_leave_uninterrupted_section( &ldt_mutex, &sigset, STATUS_SUCCESS ); if (idx == LDT_SIZE) return STATUS_TOO_MANY_THREADS; thread_data->fs = (idx << 3) | 7; } @@ -2585,7 +2585,7 @@ void signal_free_thread( TEB *teb ) { server_enter_uninterrupted_section( &ldt_mutex, &sigset ); __wine_ldt_copy.flags[thread_data->fs >> 3] = 0; - server_leave_uninterrupted_section( &ldt_mutex, &sigset ); + server_leave_uninterrupted_section( &ldt_mutex, &sigset, STATUS_SUCCESS ); } }
diff --git a/dlls/ntdll/unix/sync.c b/dlls/ntdll/unix/sync.c index 56bfe6df70f..22afb278302 100644 --- a/dlls/ntdll/unix/sync.c +++ b/dlls/ntdll/unix/sync.c @@ -343,7 +343,7 @@ static NTSTATUS get_inproc_sync( HANDLE handle, ACCESS_MASK desired_access, stru } SERVER_END_REQ;
- server_leave_uninterrupted_section( &fd_cache_mutex, &sigset ); + server_leave_uninterrupted_section( &fd_cache_mutex, &sigset, ret );
if (ret) return ret; if ((sync->access & desired_access) != desired_access) diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h index 974766b97a7..bebb1889494 100644 --- a/dlls/ntdll/unix/unix_private.h +++ b/dlls/ntdll/unix/unix_private.h @@ -225,7 +225,7 @@ extern void start_server( BOOL debug );
extern unsigned int server_call_unlocked( void *req_ptr ); extern void server_enter_uninterrupted_section( pthread_mutex_t *mutex, sigset_t *sigset ); -extern void server_leave_uninterrupted_section( pthread_mutex_t *mutex, sigset_t *sigset ); +extern void server_leave_uninterrupted_section( pthread_mutex_t *mutex, sigset_t *sigset, NTSTATUS status ); extern unsigned int server_select( const union select_op *select_op, data_size_t size, UINT flags, timeout_t abs_timeout, struct context_data *context, struct user_apc *user_apc ); extern unsigned int server_wait( const union select_op *select_op, data_size_t size, UINT flags, diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c index dcb6d7fde6f..ae356629ed7 100644 --- a/dlls/ntdll/unix/virtual.c +++ b/dlls/ntdll/unix/virtual.c @@ -826,7 +826,7 @@ void *get_builtin_so_handle( void *module ) if (ret) builtin->refcount++; break; } - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, STATUS_SUCCESS ); return ret; }
@@ -858,7 +858,7 @@ static NTSTATUS get_builtin_unix_funcs( void *module, BOOL wow, const void **fun } break; } - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, status ); return status; }
@@ -880,7 +880,7 @@ NTSTATUS load_builtin_unixlib( void *module, const char *name ) else status = STATUS_IMAGE_ALREADY_LOADED; break; } - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, status ); return status; }
@@ -1420,7 +1420,7 @@ static void VIRTUAL_Dump(void) { dump_view( view ); } - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, STATUS_SUCCESS ); } #endif
@@ -3456,7 +3456,7 @@ static NTSTATUS virtual_map_image( HANDLE mapping, void **addr_ptr, SIZE_T *size else delete_view( view );
done: - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, status ); if (needs_close) close( unix_fd ); if (shared_needs_close) close( shared_fd ); return status; @@ -3595,7 +3595,7 @@ static unsigned int virtual_map_section( HANDLE handle, PVOID *addr_ptr, ULONG_P else delete_view( view );
done: - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, res ); if (needs_close) close( unix_handle ); return res; } @@ -3898,7 +3898,7 @@ NTSTATUS virtual_create_builtin_view( void *module, const UNICODE_STRING *nt_nam } else delete_view( view ); } - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, status );
return status; } @@ -4101,7 +4101,7 @@ void virtual_free_teb( TEB *teb ) if (!is_win64) ptr = (char *)ptr - teb_offset; *(void **)ptr = next_free_teb; next_free_teb = ptr; - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, STATUS_SUCCESS ); }
@@ -4126,7 +4126,7 @@ NTSTATUS virtual_clear_tls_index( ULONG index ) #endif teb->TlsSlots[index] = 0; } - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, STATUS_SUCCESS ); } else { @@ -4148,7 +4148,7 @@ NTSTATUS virtual_clear_tls_index( ULONG index ) #endif if (teb->TlsExpansionSlots) teb->TlsExpansionSlots[index] = 0; } - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, STATUS_SUCCESS ); } return STATUS_SUCCESS; } @@ -4199,7 +4199,7 @@ NTSTATUS virtual_alloc_thread_stack( INITIAL_TEB *stack, ULONG_PTR limit_low, UL stack->StackBase = (char *)view->base + view->size; stack->StackLimit = (char *)view->base + (guard_page ? 2 * host_page_size : 0); done: - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, status ); return status; }
@@ -4511,7 +4511,7 @@ unsigned int virtual_locked_server_call( void *req_ptr ) if (has_write_watch) update_write_watches( addr, size, wine_server_reply_size( req )); } else memset( &req->u.reply, 0, sizeof(req->u.reply) ); - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, ret ); return ret; }
@@ -4535,7 +4535,7 @@ ssize_t virtual_locked_read( int fd, void *addr, size_t size ) err = errno; if (has_write_watch) update_write_watches( addr, size, max( 0, ret )); } - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, STATUS_SUCCESS ); errno = err; return ret; } @@ -4560,7 +4560,7 @@ ssize_t virtual_locked_pread( int fd, void *addr, size_t size, off_t offset ) err = errno; if (has_write_watch) update_write_watches( addr, size, max( 0, ret )); } - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, STATUS_SUCCESS ); errno = err; return ret; } @@ -4591,7 +4591,7 @@ ssize_t virtual_locked_recvmsg( int fd, struct msghdr *hdr, int flags ) if (has_write_watch) while (i--) update_write_watches( hdr->msg_iov[i].iov_base, hdr->msg_iov[i].iov_len, 0 );
- server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, STATUS_SUCCESS ); errno = err; return ret; } @@ -4609,7 +4609,7 @@ BOOL virtual_is_valid_code_address( const void *addr, SIZE_T size ) server_enter_uninterrupted_section( &virtual_mutex, &sigset ); if ((view = find_view( addr, size ))) ret = !(view->protect & VPROT_SYSTEM); /* system views are not visible to the app */ - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, STATUS_SUCCESS ); return ret; }
@@ -4712,7 +4712,7 @@ SIZE_T virtual_uninterrupted_read_memory( const void *addr, void *buffer, SIZE_T } } } - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, STATUS_SUCCESS ); return bytes_read; }
@@ -4738,7 +4738,7 @@ NTSTATUS virtual_uninterrupted_write_memory( void *addr, const void *buffer, SIZ memcpy( addr, buffer, size ); if (has_write_watch) update_write_watches( addr, size, size ); } - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, STATUS_SUCCESS ); return ret; }
@@ -4766,7 +4766,7 @@ void virtual_set_force_exec( BOOL enable ) mprotect_range( view->base, view->size, commit, 0 ); } } - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, STATUS_SUCCESS ); }
@@ -4786,7 +4786,7 @@ void virtual_enable_write_exceptions( BOOL enable ) mprotect_range( view->base, view->size, 0, 0 ); } enable_write_exceptions = enable; - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, STATUS_SUCCESS ); }
@@ -4952,7 +4952,7 @@ static NTSTATUS allocate_virtual_memory( void **ret, SIZE_T *size_ptr, ULONG typ req->base = wine_server_client_ptr( view->base ); req->offset = (char *)base - (char *)view->base; req->size = size; - server_call_unlocked( req ); + status = server_call_unlocked( req ); } SERVER_END_REQ; } @@ -5036,7 +5036,7 @@ NTSTATUS WINAPI NtAllocateVirtualMemory( HANDLE process, PVOID *ret, ULONG_PTR z
server_enter_uninterrupted_section( &virtual_mutex, &sigset ); status = allocate_virtual_memory( ret, size_ptr, type, protect, 0, limit, 0, 0 ); - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, status ); return status; }
@@ -5068,7 +5068,7 @@ NTSTATUS virtual_alloc_teb( TEB **ret_teb )
if ((status = allocate_virtual_memory( &ptr, &total, MEM_RESERVE, PAGE_READWRITE, 0, limit, 0, 0 ))) { - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, status ); return status; } teb_block = ptr; @@ -5078,14 +5078,14 @@ NTSTATUS virtual_alloc_teb( TEB **ret_teb ) allocate_virtual_memory( &ptr, &block_size, MEM_COMMIT, PAGE_READWRITE, 0, 0, 0, 0 ); } *ret_teb = teb = init_teb( ptr, is_wow64() ); - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, status );
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 ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, status ); } return status; } @@ -5228,7 +5228,7 @@ NTSTATUS WINAPI NtAllocateVirtualMemoryEx( HANDLE process, PVOID *ret, SIZE_T *s
server_enter_uninterrupted_section( &virtual_mutex, &sigset ); status = allocate_virtual_memory( ret, size_ptr, type, protect, limit_low, limit_high, align, attributes ); - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, status ); return status; }
@@ -5320,7 +5320,7 @@ NTSTATUS WINAPI NtFreeVirtualMemory( HANDLE process, PVOID *addr_ptr, SIZE_T *si *addr_ptr = base; *size_ptr = size; } - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, status ); return status; }
@@ -5391,7 +5391,7 @@ NTSTATUS WINAPI NtProtectVirtualMemory( HANDLE process, PVOID *addr_ptr, SIZE_T
if (!status) VIRTUAL_DEBUG_DUMP_VIEW( view );
- server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, status );
if (status == STATUS_SUCCESS) { @@ -5532,7 +5532,7 @@ static unsigned int fill_basic_memory_info( const void *addr, MEMORY_BASIC_INFOR else if (view->protect & (SEC_FILE | SEC_RESERVE | SEC_COMMIT)) info->Type = MEM_MAPPED; else info->Type = MEM_PRIVATE; } - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, STATUS_SUCCESS );
return STATUS_SUCCESS; } @@ -5631,7 +5631,7 @@ static unsigned int get_memory_region_info( HANDLE process, LPCVOID addr, MEMORY { if (!fake_reserved) { - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, STATUS_SUCCESS ); return STATUS_INVALID_ADDRESS; } info->AllocationBase = region_start; @@ -5641,7 +5641,7 @@ static unsigned int get_memory_region_info( HANDLE process, LPCVOID addr, MEMORY info->CommitSize = 0; }
- server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, STATUS_SUCCESS );
if (res_len) *res_len = sizeof(*info); return STATUS_SUCCESS; @@ -5864,7 +5864,7 @@ static NTSTATUS get_working_set_ex( HANDLE process, LPCVOID addr,
free_fill_working_set_info_data( &data ); if (ref != ref_buffer) free( ref ); - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, STATUS_SUCCESS );
if (res_len) *res_len = len; @@ -6264,7 +6264,7 @@ static NTSTATUS unmap_view_of_section( HANDLE process, PVOID addr, ULONG flags ) { TRACE( "not freeing in-use builtin %p\n", view->base ); builtin->refcount--; - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, STATUS_SUCCESS ); return STATUS_SUCCESS; } } @@ -6284,7 +6284,7 @@ static NTSTATUS unmap_view_of_section( HANDLE process, PVOID addr, ULONG flags ) } else FIXME( "failed to unmap %p %x\n", view->base, status ); done: - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, status ); return status; }
@@ -6447,7 +6447,7 @@ NTSTATUS WINAPI NtFlushVirtualMemory( HANDLE process, LPCVOID *addr_ptr, status = STATUS_NOT_MAPPED_DATA; #endif } - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, status ); return status; }
@@ -6506,7 +6506,7 @@ NTSTATUS WINAPI NtGetWriteWatch( HANDLE process, ULONG flags, PVOID base, SIZE_T } else status = STATUS_INVALID_PARAMETER;
- server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, status ); return status; }
@@ -6534,7 +6534,7 @@ NTSTATUS WINAPI NtResetWriteWatch( HANDLE process, PVOID base, SIZE_T size ) else status = STATUS_INVALID_PARAMETER;
- server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, status ); return status; }
@@ -6649,7 +6649,7 @@ NTSTATUS WINAPI NtAreMappedFilesTheSame(PVOID addr1, PVOID addr2) SERVER_END_REQ; }
- server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, status ); return status; }
@@ -6707,7 +6707,7 @@ static NTSTATUS set_dirty_state_information( ULONG_PTR count, MEMORY_RANGE_ENTRY else if (set_page_vprot_exec_write_protect( base, size )) mprotect_range( base, size, 0, 0 ); } - server_leave_uninterrupted_section( &virtual_mutex, &sigset ); + server_leave_uninterrupted_section( &virtual_mutex, &sigset, ret ); return ret; }