[前][次][番号順一覧][スレッド一覧]

ruby-changes:8839

From: nobu <ko1@a...>
Date: Thu, 27 Nov 2008 16:33:12 +0900 (JST)
Subject: [ruby-changes:8839] Ruby:r20375 (trunk): * signal.c (register_sigaltstack): stores alt stack for debug

nobu	2008-11-27 16:32:56 +0900 (Thu, 27 Nov 2008)

  New Revision: 20375

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=20375

  Log:
    * signal.c (register_sigaltstack): stores alt stack for debug
      purpose.

  Modified files:
    trunk/ChangeLog
    trunk/signal.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 20374)
+++ ChangeLog	(revision 20375)
@@ -1,3 +1,12 @@
+Thu Nov 27 16:32:53 2008  Nobuyoshi Nakada  <nobu@r...>
+
+	* signal.c (register_sigaltstack): stores alt stack for debug
+	  purpose.
+
+Thu Nov 27 16:12:33 2008  Nobuyoshi Nakada  <nobu@r...>
+
+	* signal.c (ruby_sigaction_t): added.
+
 Thu Nov 27 15:59:16 2008  Nobuyoshi Nakada  <nobu@r...>
 
 	* gc.c (ruby_stack_check): no check if using sigaltstack.
Index: signal.c
===================================================================
--- signal.c	(revision 20374)
+++ signal.c	(revision 20375)
@@ -429,25 +429,25 @@
 #endif
 /* alternate stack for SIGSEGV */
 static void
-register_sigaltstack()
+register_sigaltstack(void)
 {
-    static int is_altstack_defined = 0;
+    static void *altstack = 0;
     stack_t newSS, oldSS;
 
-    if (is_altstack_defined)
-      return;
+    if (altstack) return;
 
-    newSS.ss_sp = malloc(ALT_STACK_SIZE);
+    newSS.ss_sp = altstack = malloc(ALT_STACK_SIZE);
     if (newSS.ss_sp == NULL)
-      /* should handle error */
-       rb_bug("register_sigaltstack. malloc error\n");
+	/* should handle error */
+	rb_bug("register_sigaltstack. malloc error\n");
     newSS.ss_size = ALT_STACK_SIZE;
     newSS.ss_flags = 0;
 
     if (sigaltstack(&newSS, &oldSS) < 0) 
-        rb_bug("register_sigaltstack. error\n");
-    is_altstack_defined = 1;
+	rb_bug("register_sigaltstack. error\n");
 }
+#else
+#define register_sigaltstack() ((void)0)
 #endif
 
 static sighandler_t
@@ -474,7 +474,7 @@
 #endif
 #if defined(SA_ONSTACK) && defined(USE_SIGALTSTACK)
     if (signum == SIGSEGV)
-        sigact.sa_flags |= SA_ONSTACK;
+	sigact.sa_flags |= SA_ONSTACK;
 #endif
     if (sigaction(signum, &sigact, &old) < 0)
         rb_bug("sigaction error.\n");
@@ -716,9 +716,7 @@
 #ifdef SIGSEGV
       case SIGSEGV:
         func = (sighandler_t)sigsegv;
-#ifdef USE_SIGALTSTACK
         register_sigaltstack();
-#endif
         break;
 #endif
 #ifdef SIGPIPE
@@ -1126,9 +1124,7 @@
     install_sighandler(SIGBUS, sigbus);
 #endif
 #ifdef SIGSEGV
-#ifdef USE_SIGALTSTACK
     register_sigaltstack();
-#endif
     install_sighandler(SIGSEGV, (sighandler_t)sigsegv);
 #endif
     }

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]