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

ruby-changes:36829

From: nobu <ko1@a...>
Date: Sun, 21 Dec 2014 11:35:51 +0900 (JST)
Subject: [ruby-changes:36829] nobu:r48910 (trunk): signal.c: clear received signal at stack overflow

nobu	2014-12-21 11:35:44 +0900 (Sun, 21 Dec 2014)

  New Revision: 48910

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

  Log:
    signal.c: clear received signal at stack overflow
    
    * signal.c (check_stack_overflow): clear the received reserved
      signal before raising stack overflow but not aborting.

  Modified files:
    trunk/signal.c
Index: signal.c
===================================================================
--- signal.c	(revision 48909)
+++ signal.c	(revision 48910)
@@ -746,6 +746,7 @@ rb_get_next_signal(void) https://github.com/ruby/ruby/blob/trunk/signal.c#L746
 
 #if defined(USE_SIGALTSTACK) || defined(_WIN32)
 NORETURN(void ruby_thread_stack_overflow(rb_thread_t *th));
+static const char *received_signal;
 # if !(defined(HAVE_UCONTEXT_H) && (defined __i386__ || defined __x86_64__ || defined __amd64__))
 # elif defined __linux__
 #   define USE_UCONTEXT_REG 1
@@ -792,6 +793,7 @@ check_stack_overflow(const uintptr_t add https://github.com/ruby/ruby/blob/trunk/signal.c#L793
 	     * place. */
 	    th->tag = th->tag->prev;
 	}
+	received_signal = 0;
 	ruby_thread_stack_overflow(th);
     }
 }
@@ -802,6 +804,7 @@ check_stack_overflow(const void *addr) https://github.com/ruby/ruby/blob/trunk/signal.c#L804
     int ruby_stack_overflowed_p(const rb_thread_t *, const void *);
     rb_thread_t *th = ruby_current_thread;
     if (ruby_stack_overflowed_p(th, addr)) {
+	received_signal = 0;
 	ruby_thread_stack_overflow(th);
     }
 }
@@ -886,8 +889,7 @@ sigill(int sig SIGINFO_ARG) https://github.com/ruby/ruby/blob/trunk/signal.c#L889
 static void
 check_reserved_signal_(const char *name, size_t name_len)
 {
-    static const char *received;
-    const char *prev = ATOMIC_PTR_EXCHANGE(received, name);
+    const char *prev = ATOMIC_PTR_EXCHANGE(received_signal, name);
 
     if (prev) {
 	ssize_t RB_UNUSED_VAR(err);

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

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