From e4def7400f821f50866d80768d6296f11f4b641e Mon Sep 17 00:00:00 2001 From: nagai Date: Fri, 23 Jun 2006 21:37:10 +0000 Subject: * signal.c: revert last change. * ruby.h: ditto. * eval.c: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@10373 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 8 ++++ eval.c | 9 ----- ruby.h | 8 +--- signal.c | 129 +++++--------------------------------------------------------- 4 files changed, 18 insertions(+), 136 deletions(-) diff --git a/ChangeLog b/ChangeLog index dad4324743..30197bf0ec 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Sat Jun 24 06:35:00 2006 Hidetoshi NAGAI + + * signal.c: revert last change. + + * ruby.h: ditto. + + * eval.c: ditto. + Thu Jun 22 11:52:02 2006 Yukihiro Matsumoto * lib/net/http.rb (Net::HTTPResponse): duplicated error 501; diff --git a/eval.c b/eval.c index 4e16d2aceb..96042aefb1 100644 --- a/eval.c +++ b/eval.c @@ -1342,15 +1342,6 @@ int is_ruby_native_thread() { return NATIVETHREAD_EQUAL(ruby_thid, NATIVETHREAD_CURRENT()); } - -# ifdef HAVE_NATIVETHREAD_KILL -void -ruby_native_thread_kill(sig) - int sig; -{ - NATIVETHREAD_KILL(ruby_thid, sig); -} -# endif #endif void diff --git a/ruby.h b/ruby.h index a4a8753ee9..c23a60daa8 100644 --- a/ruby.h +++ b/ruby.h @@ -696,9 +696,6 @@ typedef pthread_t rb_nativethread_t; # define NATIVETHREAD_CURRENT() pthread_self() # define NATIVETHREAD_EQUAL(t1,t2) pthread_equal((t1),(t2)) # define HAVE_NATIVETHREAD - -# define NATIVETHREAD_KILL(th,sig) pthread_kill((th),(sig)) -# define HAVE_NATIVETHREAD_KILL #elif defined(_WIN32) || defined(_WIN32_WCE) typedef DWORD rb_nativethread_t; # define NATIVETHREAD_CURRENT() GetCurrentThreadId() @@ -706,13 +703,10 @@ typedef DWORD rb_nativethread_t; # define HAVE_NATIVETHREAD #endif #ifdef HAVE_NATIVETHREAD -int is_ruby_native_thread _((void)); +RUBY_EXTERN int is_ruby_native_thread(); #else #define is_ruby_native_thread() (1) #endif -#ifdef HAVE_NATIVETHREAD_KILL -void ruby_native_thread_kill _((int)); -#endif #if defined(__cplusplus) #if 0 diff --git a/signal.c b/signal.c index ffcb17b6eb..fc8d95776f 100644 --- a/signal.c +++ b/signal.c @@ -304,7 +304,6 @@ static struct { int safe; } trap_list[NSIG]; static rb_atomic_t trap_pending_list[NSIG]; -static char rb_trap_accept_nativethreads[NSIG]; rb_atomic_t rb_trap_pending; rb_atomic_t rb_trap_immediate; int rb_prohibit_interrupt = 1; @@ -336,23 +335,21 @@ ruby_signal(signum, handler) { struct sigaction sigact, old; - rb_trap_accept_nativethreads[signum] = 0; - sigact.sa_handler = handler; sigemptyset(&sigact.sa_mask); sigact.sa_flags = 0; -# if defined(SA_RESTART) +#if defined(SA_RESTART) /* All other signals but VTALRM shall restart restartable syscall VTALRM will cause EINTR to syscall if interrupted. */ if (signum != SIGVTALRM) { sigact.sa_flags |= SA_RESTART; /* SVR4, 4.3+BSD */ } -# endif -# ifdef SA_NOCLDWAIT +#endif +#ifdef SA_NOCLDWAIT if (signum == SIGCHLD && handler == SIG_IGN) sigact.sa_flags |= SA_NOCLDWAIT; -# endif +#endif sigaction(signum, &sigact, &old); return old.sa_handler; } @@ -364,46 +361,9 @@ posix_signal(signum, handler) { ruby_signal(signum, handler); } - -# ifdef HAVE_NATIVETHREAD -static sighandler_t -ruby_nativethread_signal(signum, handler) - int signum; - sighandler_t handler; -{ - sighandler_t old; - - old = ruby_signal(signum, handler); - rb_trap_accept_nativethreads[signum] = 1; - return old; -} - -void -posix_nativethread_signal(signum, handler) - int signum; - sighandler_t handler; -{ - ruby_nativethread_signal(signum, handler); -} -# endif - -#else /* !POSIX_SIGNAL */ -#define ruby_signal(sig,handler) (rb_trap_accept_nativethreads[sig] = 0, signal((sig),(handler))) - -# ifdef HAVE_NATIVETHREAD -static sighandler_t -ruby_nativethread_signal(signum, handler) - int signum; - sighandler_t handler; -{ - sighandler_t old; - - old = signal(signum, handler); - rb_trap_accept_nativethreads[signum] = 1; - return old; -} -# endif -#endif /* POSIX_SIGNAL */ +#else +#define ruby_signal(sig,handler) signal((sig),(handler)) +#endif static void signal_exec _((int sig)); static void @@ -434,36 +394,11 @@ signal_exec(sig) break; } } - else if (trap_list[sig].cmd == Qundef) { - rb_thread_signal_exit(); - } else { rb_thread_trap_eval(trap_list[sig].cmd, sig, trap_list[sig].safe); } } -#if defined(HAVE_NATIVETHREAD) && defined(HAVE_NATIVETHREAD_KILL) -static void -sigsend_to_ruby_thread(int sig) -{ -# ifdef HAVE_SIGPROCMASK - sigset_t mask, old_mask; -# else - int mask, old_mask; -# endif - -# ifdef HAVE_SIGPROCMASK - sigfillset(&mask); - sigprocmask(SIG_BLOCK, &mask, &old_mask); -# else - mask = sigblock(~0); - sigsetmask(mask); -# endif - - ruby_native_thread_kill(sig); -} -#endif - static RETSIGTYPE sighandler _((int)); static RETSIGTYPE sighandler(sig) @@ -479,22 +414,11 @@ sighandler(sig) rb_bug("trap_handler: Bad signal %d", sig); } -#if defined(HAVE_NATIVETHREAD) && defined(HAVE_NATIVETHREAD_KILL) - if (!is_ruby_native_thread() && !rb_trap_accept_nativethreads[sig]) { - sigsend_to_ruby_thread(sig); - return; - } -#endif - #if !defined(BSD_SIGNAL) && !defined(POSIX_SIGNAL) - if (rb_trap_accept_nativethreads[sig]) { - ruby_nativethread_signal(sig, sighandler); - } else { - ruby_signal(sig, sighandler); - } + ruby_signal(sig, sighandler); #endif - if (trap_list[sig].cmd == 0 && ATOMIC_TEST(rb_trap_immediate)) { + if (ATOMIC_TEST(rb_trap_immediate)) { IN_MAIN_CONTEXT(signal_exec, sig); ATOMIC_SET(rb_trap_immediate, 1); } @@ -510,13 +434,6 @@ static RETSIGTYPE sigbus(sig) int sig; { -#if defined(HAVE_NATIVETHREAD) && defined(HAVE_NATIVETHREAD_KILL) - if (!is_ruby_native_thread() && !rb_trap_accept_nativethreads[sig]) { - sigsend_to_ruby_thread(sig); - return; - } -#endif - rb_bug("Bus Error"); } #endif @@ -527,13 +444,6 @@ static RETSIGTYPE sigsegv(sig) int sig; { -#if defined(HAVE_NATIVETHREAD) && defined(HAVE_NATIVETHREAD_KILL) - if (!is_ruby_native_thread() && !rb_trap_accept_nativethreads[sig]) { - sigsend_to_ruby_thread(sig); - return; - } -#endif - rb_bug("Segmentation fault"); } #endif @@ -862,27 +772,6 @@ install_sighandler(signum, handler) } } -#ifdef HAVE_NATIVETHREAD -static void -install_nativethread_sighandler(signum, handler) - int signum; - sighandler_t handler; -{ - sighandler_t old; - int old_st; - - old_st = rb_trap_accept_nativethreads[signum]; - old = ruby_nativethread_signal(signum, handler); - if (old != SIG_DFL) { - if (old_st) { - ruby_nativethread_signal(signum, old); - } else { - ruby_signal(signum, old); - } - } -} -#endif - static void init_sigchld(sig) int sig; -- cgit v1.2.3