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/