ruby-changes:27998
From: usa <ko1@a...>
Date: Tue, 2 Apr 2013 12:58:59 +0900 (JST)
Subject: [ruby-changes:27998] usa:r40050 (ruby_1_9_3): merge revision(s) 39354,39356,39382: [Backport #5014]
usa 2013-04-02 12:58:47 +0900 (Tue, 02 Apr 2013) New Revision: 40050 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=40050 Log: merge revision(s) 39354,39356,39382: [Backport #5014] * signal.c (sigsegv): avoid to use async signal unsafe functions when nested sigsegv is happen. [Bug #5014] [ruby-dev:44082] * signal.c (check_stack_overflow): extract duplicated code and get rid of declaration-after-statement. [Bug #5014] * signal.c (ruby_abort): fix typo in r39354 [Bug #5014] Modified directories: branches/ruby_1_9_3/ Modified files: branches/ruby_1_9_3/ChangeLog branches/ruby_1_9_3/signal.c branches/ruby_1_9_3/version.h Index: ruby_1_9_3/ChangeLog =================================================================== --- ruby_1_9_3/ChangeLog (revision 40049) +++ ruby_1_9_3/ChangeLog (revision 40050) @@ -1,3 +1,18 @@ https://github.com/ruby/ruby/blob/trunk/ruby_1_9_3/ChangeLog#L1 +Tue Apr 2 12:56:15 2013 Naohisa Goto <ngotogenome@g...> + + * signal.c (ruby_abort): fix typo in r39354 [Bug #5014] + +Tue Apr 2 12:56:15 2013 Nobuyoshi Nakada <nobu@r...> + + * signal.c (check_stack_overflow): extract duplicated code and get rid + of declaration-after-statement. [Bug #5014] + +Tue Apr 2 12:56:15 2013 KOSAKI Motohiro <kosaki.motohiro@g...> + + * signal.c (sigsegv): avoid to use async signal unsafe functions + when nested sigsegv is happen. + [Bug #5014] [ruby-dev:44082] + Fri Mar 29 13:22:15 2013 NAKAMURA Usaku <usa@r...> * include/ruby/missing.h: fixed merge mistake of r39985. Index: ruby_1_9_3/version.h =================================================================== --- ruby_1_9_3/version.h (revision 40049) +++ ruby_1_9_3/version.h (revision 40050) @@ -1,10 +1,10 @@ https://github.com/ruby/ruby/blob/trunk/ruby_1_9_3/version.h#L1 #define RUBY_VERSION "1.9.3" -#define RUBY_PATCHLEVEL 401 +#define RUBY_PATCHLEVEL 402 -#define RUBY_RELEASE_DATE "2013-03-29" +#define RUBY_RELEASE_DATE "2013-04-02" #define RUBY_RELEASE_YEAR 2013 -#define RUBY_RELEASE_MONTH 3 -#define RUBY_RELEASE_DAY 29 +#define RUBY_RELEASE_MONTH 4 +#define RUBY_RELEASE_DAY 2 #include "ruby/version.h" Index: ruby_1_9_3/signal.c =================================================================== --- ruby_1_9_3/signal.c (revision 40049) +++ ruby_1_9_3/signal.c (revision 40050) @@ -564,6 +564,23 @@ rb_get_next_signal(void) https://github.com/ruby/ruby/blob/trunk/ruby_1_9_3/signal.c#L564 return sig; } + +#ifdef USE_SIGALTSTACK +static void +check_stack_overflow(const void *addr) +{ + int ruby_stack_overflowed_p(const rb_thread_t *, const void *); + NORETURN(void ruby_thread_stack_overflow(rb_thread_t *th)); + rb_thread_t *th = GET_THREAD(); + if (ruby_stack_overflowed_p(th, addr)) { + ruby_thread_stack_overflow(th); + } +} +#define CHECK_STACK_OVERFLOW() check_stack_overflow(info->si_addr) +#else +#define CHECK_STACK_OVERFLOW() (void)0 +#endif + #ifdef SIGBUS static RETSIGTYPE sigbus(int sig SIGINFO_ARG) @@ -573,41 +590,44 @@ sigbus(int sig SIGINFO_ARG) https://github.com/ruby/ruby/blob/trunk/ruby_1_9_3/signal.c#L590 * and it's delivered as SIGBUS instaed of SIGSEGV to userland. It's crazy * wrong IMHO. but anyway we have to care it. Sigh. */ -#if defined __MACH__ && defined __APPLE__ && defined USE_SIGALTSTACK - int ruby_stack_overflowed_p(const rb_thread_t *, const void *); - NORETURN(void ruby_thread_stack_overflow(rb_thread_t *th)); - rb_thread_t *th = GET_THREAD(); - if (ruby_stack_overflowed_p(th, info->si_addr)) { - ruby_thread_stack_overflow(th); - } +#if defined __APPLE__ + CHECK_STACK_OVERFLOW(); #endif rb_bug("Bus Error"); } #endif #ifdef SIGSEGV +static void ruby_abort(void) +{ +#ifdef __sun + /* Solaris's abort() is async signal unsafe. Of course, it is not + * POSIX compliant. + */ + raise(SIGABRT); +#else + abort(); +#endif + +} + static int segv_received = 0; +extern int ruby_disable_gc_stress; + static RETSIGTYPE sigsegv(int sig SIGINFO_ARG) { -#ifdef USE_SIGALTSTACK - int ruby_stack_overflowed_p(const rb_thread_t *, const void *); - NORETURN(void ruby_thread_stack_overflow(rb_thread_t *th)); - rb_thread_t *th = GET_THREAD(); - if (ruby_stack_overflowed_p(th, info->si_addr)) { - ruby_thread_stack_overflow(th); - } -#endif if (segv_received) { - fprintf(stderr, "SEGV received in SEGV handler\n"); - abort(); - } - else { - extern int ruby_disable_gc_stress; - segv_received = 1; - ruby_disable_gc_stress = 1; - rb_bug("Segmentation fault"); + char msg[] = "SEGV received in SEGV handler\n"; + write(2, msg, sizeof(msg)); + ruby_abort(); } + + CHECK_STACK_OVERFLOW(); + + segv_received = 1; + ruby_disable_gc_stress = 1; + rb_bug("Segmentation fault"); } #endif Property changes on: ruby_1_9_3 ___________________________________________________________________ Modified: svn:mergeinfo Merged /trunk:r39354,39356,39382 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/