aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--thread.c12
2 files changed, 16 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 367219db43..0001968032 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Tue Oct 23 22:34:49 2012 Koichi Sasada <ko1@atdot.net>
+
+ * thread.c (thread_raise_m): check interrupts after Thread#raise
+ if a target thread is the current thread because the behavior
+ of Thread.current.raise is expected to perform same as
+ Kernel.raise (by rubyspec).
+
Tue Oct 23 17:08:39 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
* ruby.c (usage, process_options): show more info in --help.
diff --git a/thread.c b/thread.c
index 4b750b4dcc..b512566a0c 100644
--- a/thread.c
+++ b/thread.c
@@ -1894,9 +1894,15 @@ rb_thread_fd_close(int fd)
static VALUE
thread_raise_m(int argc, VALUE *argv, VALUE self)
{
- rb_thread_t *th;
- GetThreadPtr(self, th);
- rb_threadptr_raise(th, argc, argv);
+ rb_thread_t *target_th;
+ rb_thread_t *th = GET_THREAD();
+ GetThreadPtr(self, target_th);
+ rb_threadptr_raise(target_th, argc, argv);
+
+ /* To perform Thread.current.raise as Kernel.raise */
+ if (th == target_th) {
+ RUBY_VM_CHECK_INTS(th);
+ }
return Qnil;
}