Alexandre Julliard : ntdll: Split the signal setup into process-wide and thread-specific routines.

Alexandre Julliard julliard at winehq.org
Fri Jul 4 13:59:10 CDT 2008


Module: wine
Branch: master
Commit: 531ff0be2601f1e25f01822f0bb0fcd2a655664e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=531ff0be2601f1e25f01822f0bb0fcd2a655664e

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Thu Jul  3 20:18:23 2008 +0200

ntdll: Split the signal setup into process-wide and thread-specific routines.

---

 dlls/ntdll/ntdll_misc.h     |    3 ++-
 dlls/ntdll/server.c         |    2 +-
 dlls/ntdll/signal_i386.c    |   25 ++++++++++++++-----------
 dlls/ntdll/signal_powerpc.c |   17 ++++++++++++-----
 dlls/ntdll/signal_sparc.c   |   16 ++++++++++++----
 dlls/ntdll/signal_x86_64.c  |   16 ++++++++++++----
 dlls/ntdll/thread.c         |    2 +-
 7 files changed, 54 insertions(+), 27 deletions(-)

diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h
index 6f428e0..3317a6a 100644
--- a/dlls/ntdll/ntdll_misc.h
+++ b/dlls/ntdll/ntdll_misc.h
@@ -53,7 +53,8 @@ extern NTSTATUS NTDLL_wait_for_multiple_objects( UINT count, const HANDLE *handl
                                                  const LARGE_INTEGER *timeout, HANDLE signal_object );
 
 /* init routines */
-extern BOOL SIGNAL_Init(void);
+extern void signal_init_thread(void);
+extern void signal_init_process(void);
 extern size_t get_signal_stack_total_size(void);
 extern void version_init( const WCHAR *appname );
 extern void debug_init(void);
diff --git a/dlls/ntdll/server.c b/dlls/ntdll/server.c
index 3d8beee..6e41eb5 100644
--- a/dlls/ntdll/server.c
+++ b/dlls/ntdll/server.c
@@ -985,7 +985,7 @@ NTSTATUS server_init_process_done(void)
      * We do need the handlers in place by the time the request is over, so
      * we set them up here. If we segfault between here and the server call
      * something is very wrong... */
-    if (!SIGNAL_Init()) exit(1);
+    signal_init_process();
 
     /* Signal the parent process to continue */
     SERVER_START_REQ( init_process_done )
diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c
index 9edbaa1..4351844 100644
--- a/dlls/ntdll/signal_i386.c
+++ b/dlls/ntdll/signal_i386.c
@@ -1533,12 +1533,10 @@ int __wine_set_signal_handler(unsigned int sig, wine_signal_handler wsh)
 
 
 /**********************************************************************
- *		SIGNAL_Init
+ *		signal_init_thread
  */
-BOOL SIGNAL_Init(void)
+void signal_init_thread(void)
 {
-    struct sigaction sig_act;
-
 #ifdef HAVE_SIGALTSTACK
     stack_t ss;
 
@@ -1553,12 +1551,16 @@ BOOL SIGNAL_Init(void)
     ss.ss_sp    = get_signal_stack();
     ss.ss_size  = signal_stack_size;
     ss.ss_flags = 0;
-    if (sigaltstack(&ss, NULL) == -1)
-    {
-        perror( "sigaltstack" );
-        return FALSE;
-    }
+    if (sigaltstack(&ss, NULL) == -1) perror( "sigaltstack" );
 #endif  /* HAVE_SIGALTSTACK */
+}
+
+/**********************************************************************
+ *		signal_init_process
+ */
+void signal_init_process(void)
+{
+    struct sigaction sig_act;
 
     sig_act.sa_mask = server_block_set;
     sig_act.sa_flags = SA_SIGINFO | SA_RESTART;
@@ -1594,11 +1596,12 @@ BOOL SIGNAL_Init(void)
     if (sigaction( SIGUSR2, &sig_act, NULL ) == -1) goto error;
 #endif
 
-    return TRUE;
+    signal_init_thread();
+    return;
 
  error:
     perror("sigaction");
-    return FALSE;
+    exit(1);
 }
 
 
diff --git a/dlls/ntdll/signal_powerpc.c b/dlls/ntdll/signal_powerpc.c
index a468754..e65591b 100644
--- a/dlls/ntdll/signal_powerpc.c
+++ b/dlls/ntdll/signal_powerpc.c
@@ -648,9 +648,16 @@ int __wine_set_signal_handler(unsigned int sig, wine_signal_handler wsh)
 
 
 /**********************************************************************
- *		SIGNAL_Init
+ *		signal_init_thread
  */
-BOOL SIGNAL_Init(void)
+void signal_init_thread(void)
+{
+}
+
+/**********************************************************************
+ *		signal_init_process
+ */
+void signal_init_process(void)
 {
     if (set_handler( SIGINT,  (void (*)())int_handler ) == -1) goto error;
     if (set_handler( SIGFPE,  (void (*)())fpe_handler ) == -1) goto error;
@@ -665,12 +672,12 @@ BOOL SIGNAL_Init(void)
 #ifdef SIGTRAP
     if (set_handler( SIGTRAP, (void (*)())trap_handler ) == -1) goto error;
 #endif
-
-    return TRUE;
+    signal_init_thread();
+    return;
 
  error:
     perror("sigaction");
-    return FALSE;
+    exit(1);
 }
 
 
diff --git a/dlls/ntdll/signal_sparc.c b/dlls/ntdll/signal_sparc.c
index d72269a..d3896f3 100644
--- a/dlls/ntdll/signal_sparc.c
+++ b/dlls/ntdll/signal_sparc.c
@@ -457,9 +457,16 @@ int __wine_set_signal_handler(unsigned int sig, wine_signal_handler wsh)
 
 
 /**********************************************************************
- *		SIGNAL_Init
+ *		signal_init_thread
  */
-BOOL SIGNAL_Init(void)
+void signal_init_thread(void)
+{
+}
+
+/**********************************************************************
+ *		signal_init_process
+ */
+void signal_init_process(void)
 {
     if (set_handler( SIGINT,  (void (*)())int_handler  ) == -1) goto error;
     if (set_handler( SIGFPE,  (void (*)())fpe_handler  ) == -1) goto error;
@@ -476,11 +483,12 @@ BOOL SIGNAL_Init(void)
        this is correct, because that is what x86 does, or it is harmful 
        because it could obscure problems in user code */
     asm("ta 6"); /* 6 == ST_FIX_ALIGN defined in sys/trap.h */
-   return TRUE;
+    signal_init_thread();
+    return;
 
  error:
     perror("sigaction");
-    return FALSE;
+    exit(1);
 }
 
 
diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c
index 8225c6a..a7a0d3b 100644
--- a/dlls/ntdll/signal_x86_64.c
+++ b/dlls/ntdll/signal_x86_64.c
@@ -481,9 +481,16 @@ int __wine_set_signal_handler(unsigned int sig, wine_signal_handler wsh)
 
 
 /**********************************************************************
- *		SIGNAL_Init
+ *		signal_init_thread
  */
-BOOL SIGNAL_Init(void)
+void signal_init_thread(void)
+{
+}
+
+/**********************************************************************
+ *		signal_init_process
+ */
+void signal_init_process(void)
 {
     if (set_handler( SIGINT,  (void (*)())int_handler ) == -1) goto error;
     if (set_handler( SIGFPE,  (void (*)())fpe_handler ) == -1) goto error;
@@ -498,11 +505,12 @@ BOOL SIGNAL_Init(void)
 #ifdef SIGTRAP
     if (set_handler( SIGTRAP, (void (*)())trap_handler ) == -1) goto error;
 #endif
-    return TRUE;
+    signal_init_thread();
+    return;
 
  error:
     perror("sigaction");
-    return FALSE;
+    exit(1);
 }
 
 
diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c
index 4298e95..9411db1 100644
--- a/dlls/ntdll/thread.c
+++ b/dlls/ntdll/thread.c
@@ -424,7 +424,7 @@ static void start_thread( struct wine_pthread_thread_info *info )
     thread_data->debug_info = &debug_info;
 
     pthread_functions.init_current_teb( info );
-    SIGNAL_Init();
+    signal_init_thread();
     server_init_thread( info->pid, info->tid, func );
     pthread_functions.init_thread( info );
     virtual_alloc_thread_stack( info->stack_base, info->stack_size );




More information about the wine-cvs mailing list