From c388c58b9f8074b52ded31e3397646f3b305bfbd Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Thu, 18 Jan 2007 12:20:56 +0100 Subject: [PATCH] ntdll: Make the server signal mask global. --- dlls/ntdll/ntdll_misc.h | 5 +++-- dlls/ntdll/server.c | 26 +++++++++++++------------- dlls/ntdll/signal_i386.c | 6 +----- dlls/ntdll/signal_powerpc.c | 5 +---- dlls/ntdll/signal_sparc.c | 3 +-- dlls/ntdll/signal_x86_64.c | 5 +---- 6 files changed, 20 insertions(+), 30 deletions(-) diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h index b06646c7c3d..725665dd527 100644 --- a/dlls/ntdll/ntdll_misc.h +++ b/dlls/ntdll/ntdll_misc.h @@ -63,8 +63,9 @@ extern void DECLSPEC_NORETURN server_protocol_error( const char *err, ... ); extern void DECLSPEC_NORETURN server_protocol_perror( const char *err ); extern void DECLSPEC_NORETURN server_exit_thread( int status ); extern void DECLSPEC_NORETURN server_abort_thread( int status ); -void server_enter_uninterrupted_section( RTL_CRITICAL_SECTION *cs, sigset_t *sigset ); -void server_leave_uninterrupted_section( RTL_CRITICAL_SECTION *cs, sigset_t *sigset ); +extern sigset_t server_block_set; +extern void server_enter_uninterrupted_section( RTL_CRITICAL_SECTION *cs, sigset_t *sigset ); +extern void server_leave_uninterrupted_section( RTL_CRITICAL_SECTION *cs, sigset_t *sigset ); extern int server_remove_fd_from_cache( obj_handle_t handle ); extern int server_get_unix_fd( obj_handle_t handle, unsigned int access, int *unix_fd, int *needs_close, enum server_fd_type *type, int *flags ); diff --git a/dlls/ntdll/server.c b/dlls/ntdll/server.c index 42c3ace363c..ded9f5b1f35 100644 --- a/dlls/ntdll/server.c +++ b/dlls/ntdll/server.c @@ -89,7 +89,7 @@ abs_time_t server_start_time = { 0, 0 }; /* time of server startup */ extern struct wine_pthread_functions pthread_functions; -static sigset_t block_set; /* signals to block during server calls */ +sigset_t server_block_set; /* signals to block during server calls */ static int fd_socket = -1; /* socket to exchange file descriptors with the server */ static RTL_CRITICAL_SECTION fd_cache_section; @@ -156,7 +156,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, &block_set, NULL ); + pthread_functions.sigprocmask( SIG_BLOCK, &server_block_set, NULL ); size = 0; NtFreeVirtualMemory( GetCurrentProcess(), &info.stack_base, &size, MEM_RELEASE | MEM_SYSTEM ); @@ -179,7 +179,7 @@ void server_exit_thread( int status ) */ void server_abort_thread( int status ) { - pthread_functions.sigprocmask( SIG_BLOCK, &block_set, NULL ); + pthread_functions.sigprocmask( 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 ); @@ -318,7 +318,7 @@ unsigned int wine_server_call( void *req_ptr ) struct __server_request_info * const req = req_ptr; sigset_t old_set; - pthread_functions.sigprocmask( SIG_BLOCK, &block_set, &old_set ); + pthread_functions.sigprocmask( SIG_BLOCK, &server_block_set, &old_set ); send_request( req ); wait_reply( req ); pthread_functions.sigprocmask( SIG_SETMASK, &old_set, NULL ); @@ -331,7 +331,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, &block_set, sigset ); + pthread_functions.sigprocmask( SIG_BLOCK, &server_block_set, sigset ); RtlEnterCriticalSection( cs ); } @@ -1010,14 +1010,14 @@ void server_init_process(void) } /* setup the signal mask */ - sigemptyset( &block_set ); - sigaddset( &block_set, SIGALRM ); - sigaddset( &block_set, SIGIO ); - sigaddset( &block_set, SIGINT ); - sigaddset( &block_set, SIGHUP ); - sigaddset( &block_set, SIGUSR1 ); - sigaddset( &block_set, SIGUSR2 ); - sigaddset( &block_set, SIGCHLD ); + sigemptyset( &server_block_set ); + sigaddset( &server_block_set, SIGALRM ); + sigaddset( &server_block_set, SIGIO ); + sigaddset( &server_block_set, SIGINT ); + sigaddset( &server_block_set, SIGHUP ); + sigaddset( &server_block_set, SIGUSR1 ); + sigaddset( &server_block_set, SIGUSR2 ); + sigaddset( &server_block_set, SIGCHLD ); /* receive the first thread request fd on the main socket */ ntdll_get_thread_data()->request_fd = receive_fd( &dummy_handle ); diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c index fdbfb64cd91..46bf9c2b077 100644 --- a/dlls/ntdll/signal_i386.c +++ b/dlls/ntdll/signal_i386.c @@ -1341,12 +1341,8 @@ BOOL SIGNAL_Init(void) } #endif /* HAVE_SIGALTSTACK */ - sigemptyset( &sig_act.sa_mask ); - sigaddset( &sig_act.sa_mask, SIGINT ); - sigaddset( &sig_act.sa_mask, SIGUSR1 ); - sigaddset( &sig_act.sa_mask, SIGUSR2 ); + sig_act.sa_mask = server_block_set; sig_act.sa_flags = SA_SIGINFO | SA_RESTART; - #ifdef SA_ONSTACK sig_act.sa_flags |= SA_ONSTACK; #endif diff --git a/dlls/ntdll/signal_powerpc.c b/dlls/ntdll/signal_powerpc.c index c584b881e01..27877864e05 100644 --- a/dlls/ntdll/signal_powerpc.c +++ b/dlls/ntdll/signal_powerpc.c @@ -630,10 +630,7 @@ static int set_handler( int sig, void (*func)() ) struct sigaction sig_act; sig_act.sa_sigaction = func; - sigemptyset( &sig_act.sa_mask ); - sigaddset( &sig_act.sa_mask, SIGINT ); - sigaddset( &sig_act.sa_mask, SIGALRM ); - + sig_act.sa_mask = server_block_set; sig_act.sa_flags = SA_RESTART | SA_SIGINFO; return sigaction( sig, &sig_act, NULL ); } diff --git a/dlls/ntdll/signal_sparc.c b/dlls/ntdll/signal_sparc.c index 92f20aabf4f..7412a8e8bce 100644 --- a/dlls/ntdll/signal_sparc.c +++ b/dlls/ntdll/signal_sparc.c @@ -436,9 +436,8 @@ static int set_handler( int sig, void (*func)() ) { struct sigaction sig_act; - sig_act.sa_handler = NULL; sig_act.sa_sigaction = func; - sigemptyset( &sig_act.sa_mask ); + sig_act.sa_mask = server_block_set; sig_act.sa_flags = SA_SIGINFO; return sigaction( sig, &sig_act, NULL ); diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c index 53a24e5faa7..69f6272f1e6 100644 --- a/dlls/ntdll/signal_x86_64.c +++ b/dlls/ntdll/signal_x86_64.c @@ -462,10 +462,7 @@ static int set_handler( int sig, void (*func)() ) struct sigaction sig_act; sig_act.sa_sigaction = func; - sigemptyset( &sig_act.sa_mask ); - sigaddset( &sig_act.sa_mask, SIGINT ); - sigaddset( &sig_act.sa_mask, SIGUSR2 ); - + sig_act.sa_mask = server_block_set; sig_act.sa_flags = SA_RESTART | SA_SIGINFO | SA_ONSTACK; return sigaction( sig, &sig_act, NULL ); } -- 2.11.4.GIT