Alexandre Julliard : ntdll: Make the server signal mask global.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Jan 18 06:45:12 CST 2007
Module: wine
Branch: master
Commit: c388c58b9f8074b52ded31e3397646f3b305bfbd
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c388c58b9f8074b52ded31e3397646f3b305bfbd
Author: Alexandre Julliard <julliard at winehq.org>
Date: Thu Jan 18 12:20:56 2007 +0100
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 b06646c..725665d 100644
--- a/dlls/ntdll/ntdll_misc.h
+++ b/dlls/ntdll/ntdll_misc.h
@@ -63,8 +63,9 @@ extern void DECLSPEC_NORETURN server_pro
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 42c3ace..ded9f5b 100644
--- a/dlls/ntdll/server.c
+++ b/dlls/ntdll/server.c
@@ -89,7 +89,7 @@ abs_time_t server_start_time = { 0, 0 };
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
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
*/
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 fdbfb64..46bf9c2 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 c584b88..2787786 100644
--- a/dlls/ntdll/signal_powerpc.c
+++ b/dlls/ntdll/signal_powerpc.c
@@ -630,10 +630,7 @@ static int set_handler( int sig, void (*
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 92f20aa..7412a8e 100644
--- a/dlls/ntdll/signal_sparc.c
+++ b/dlls/ntdll/signal_sparc.c
@@ -436,9 +436,8 @@ static int set_handler( int sig, void (*
{
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 53a24e5..69f6272 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 (*
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 );
}
More information about the wine-cvs
mailing list