ntdll: Call pthread_sigmask directly instead of through the pthread function table.

This commit is contained in:
Alexandre Julliard 2009-02-20 11:15:06 +01:00
parent 9e8016c3b6
commit 36334a1b5a
3 changed files with 14 additions and 17 deletions

View File

@ -39,7 +39,6 @@
#include "wine/exception.h"
#include "wine/library.h"
#include "wine/pthread.h"
#include "wine/unicode.h"
#include "wine/debug.h"
#include "wine/server.h"
@ -56,8 +55,6 @@ WINE_DECLARE_DEBUG_CHANNEL(imports);
#define RT_MANIFEST ((ULONG_PTR)24)
#define ISOLATIONAWARE_MANIFEST_RESOURCE_ID ((ULONG_PTR)2)
extern struct wine_pthread_functions pthread_functions;
typedef DWORD (CALLBACK *DLLENTRYPROC)(HMODULE,DWORD,LPVOID);
static int process_detaching = 0; /* set on process detach to avoid deadlocks with thread detach */
@ -2426,7 +2423,7 @@ static NTSTATUS attach_process_dlls( void *wm )
{
NTSTATUS status;
pthread_functions.sigprocmask( SIG_UNBLOCK, &server_block_set, NULL );
pthread_sigmask( SIG_UNBLOCK, &server_block_set, NULL );
RtlEnterCriticalSection( &loader_section );
if ((status = process_attach( wm, (LPVOID)1 )) != STATUS_SUCCESS)

View File

@ -163,7 +163,7 @@ void server_exit_thread( int status )
fds[1] = ntdll_get_thread_data()->wait_fd[1];
fds[2] = ntdll_get_thread_data()->reply_fd;
fds[3] = ntdll_get_thread_data()->request_fd;
pthread_functions.sigprocmask( SIG_BLOCK, &server_block_set, NULL );
pthread_sigmask( SIG_BLOCK, &server_block_set, NULL );
info.stack_size = virtual_free_system_view( &info.stack_base );
info.teb_size = virtual_free_system_view( &info.teb_base );
@ -181,7 +181,7 @@ void server_exit_thread( int status )
*/
void server_abort_thread( int status )
{
pthread_functions.sigprocmask( SIG_BLOCK, &server_block_set, NULL );
pthread_sigmask( SIG_BLOCK, &server_block_set, NULL );
close( ntdll_get_thread_data()->wait_fd[0] );
close( ntdll_get_thread_data()->wait_fd[1] );
close( ntdll_get_thread_data()->reply_fd );
@ -323,10 +323,10 @@ unsigned int wine_server_call( void *req_ptr )
sigset_t old_set;
unsigned int ret;
pthread_functions.sigprocmask( SIG_BLOCK, &server_block_set, &old_set );
pthread_sigmask( SIG_BLOCK, &server_block_set, &old_set );
ret = send_request( req );
if (!ret) ret = wait_reply( req );
pthread_functions.sigprocmask( SIG_SETMASK, &old_set, NULL );
pthread_sigmask( SIG_SETMASK, &old_set, NULL );
return ret;
}
@ -336,7 +336,7 @@ unsigned int wine_server_call( void *req_ptr )
*/
void server_enter_uninterrupted_section( RTL_CRITICAL_SECTION *cs, sigset_t *sigset )
{
pthread_functions.sigprocmask( SIG_BLOCK, &server_block_set, sigset );
pthread_sigmask( SIG_BLOCK, &server_block_set, sigset );
RtlEnterCriticalSection( cs );
}
@ -347,7 +347,7 @@ void server_enter_uninterrupted_section( RTL_CRITICAL_SECTION *cs, sigset_t *sig
void server_leave_uninterrupted_section( RTL_CRITICAL_SECTION *cs, sigset_t *sigset )
{
RtlLeaveCriticalSection( cs );
pthread_functions.sigprocmask( SIG_SETMASK, sigset, NULL );
pthread_sigmask( SIG_SETMASK, sigset, NULL );
}
@ -985,7 +985,7 @@ void server_init_process(void)
sigaddset( &server_block_set, SIGUSR1 );
sigaddset( &server_block_set, SIGUSR2 );
sigaddset( &server_block_set, SIGCHLD );
pthread_functions.sigprocmask( SIG_BLOCK, &server_block_set, NULL );
pthread_sigmask( SIG_BLOCK, &server_block_set, NULL );
/* receive the first thread request fd on the main socket */
ntdll_get_thread_data()->request_fd = receive_fd( &version );

View File

@ -88,7 +88,7 @@ static void ldt_lock(void)
{
sigset_t sigset;
pthread_functions.sigprocmask( SIG_BLOCK, &server_block_set, &sigset );
pthread_sigmask( SIG_BLOCK, &server_block_set, &sigset );
RtlEnterCriticalSection( &ldt_section );
if (ldt_section.RecursionCount == 1) ldt_sigset = sigset;
}
@ -99,7 +99,7 @@ static void ldt_unlock(void)
{
sigset_t sigset = ldt_sigset;
RtlLeaveCriticalSection( &ldt_section );
pthread_functions.sigprocmask( SIG_SETMASK, &sigset, NULL );
pthread_sigmask( SIG_SETMASK, &sigset, NULL );
}
else RtlLeaveCriticalSection( &ldt_section );
}
@ -428,7 +428,7 @@ static void start_thread( struct wine_pthread_thread_info *info )
server_init_thread( func );
pthread_functions.init_thread( info );
virtual_alloc_thread_stack( info->stack_base, info->stack_size );
pthread_functions.sigprocmask( SIG_UNBLOCK, &server_block_set, NULL );
pthread_sigmask( SIG_UNBLOCK, &server_block_set, NULL );
RtlAcquirePebLock();
InsertHeadList( &tls_links, &teb->TlsLinks );
@ -524,7 +524,7 @@ NTSTATUS WINAPI RtlCreateUserThread( HANDLE process, const SECURITY_DESCRIPTOR *
return status;
}
pthread_functions.sigprocmask( SIG_BLOCK, &server_block_set, &sigset );
pthread_sigmask( SIG_BLOCK, &server_block_set, &sigset );
addr = NULL;
size = sigstack_total_size;
@ -577,7 +577,7 @@ NTSTATUS WINAPI RtlCreateUserThread( HANDLE process, const SECURITY_DESCRIPTOR *
status = STATUS_NO_MEMORY;
goto error;
}
pthread_functions.sigprocmask( SIG_SETMASK, &sigset, NULL );
pthread_sigmask( SIG_SETMASK, &sigset, NULL );
if (id) id->UniqueThread = ULongToHandle(tid);
if (handle_ptr) *handle_ptr = handle;
@ -593,7 +593,7 @@ error:
NtFreeVirtualMemory( NtCurrentProcess(), &addr, &size, MEM_RELEASE );
}
if (handle) NtClose( handle );
pthread_functions.sigprocmask( SIG_SETMASK, &sigset, NULL );
pthread_sigmask( SIG_SETMASK, &sigset, NULL );
close( request_pipe[1] );
return status;
}