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