aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYusuke Endoh <mame@ruby-lang.org>2022-11-08 13:35:37 +0900
committerYusuke Endoh <mame@ruby-lang.org>2022-11-09 12:25:35 +0900
commitc3de7a3c58bf9a138ff8720ed56c0045d2b8e01d (patch)
treefa94950f00752f88d9284d5fc34071251168b514
parent558137d5f3b77294949bd042bb99ae12d37faa2f (diff)
downloadruby-c3de7a3c58bf9a138ff8720ed56c0045d2b8e01d.tar.gz
Make pending_interrupt?(Exception) work
A patch from katsu (Katsuhiro Ueno) [Bug #19110]
-rw-r--r--test/ruby/test_thread.rb8
-rw-r--r--thread.c2
2 files changed, 9 insertions, 1 deletions
diff --git a/test/ruby/test_thread.rb b/test/ruby/test_thread.rb
index f6156a16fd..8ca23e7d02 100644
--- a/test/ruby/test_thread.rb
+++ b/test/ruby/test_thread.rb
@@ -1515,4 +1515,12 @@ q.pop
end
};
end
+
+ def test_pending_interrupt?
+ t = Thread.handle_interrupt(Exception => :never) { Thread.new { Thread.stop } }
+ t.raise(StandardError)
+ assert_equal(true, t.pending_interrupt?)
+ assert_equal(true, t.pending_interrupt?(Exception))
+ assert_equal(false, t.pending_interrupt?(ArgumentError))
+ end
end
diff --git a/thread.c b/thread.c
index d8925e618e..624c070877 100644
--- a/thread.c
+++ b/thread.c
@@ -1922,7 +1922,7 @@ rb_threadptr_pending_interrupt_include_p(rb_thread_t *th, VALUE err)
int i;
for (i=0; i<RARRAY_LEN(th->pending_interrupt_queue); i++) {
VALUE e = RARRAY_AREF(th->pending_interrupt_queue, i);
- if (rb_class_inherited_p(e, err)) {
+ if (rb_obj_is_kind_of(e, err)) {
return TRUE;
}
}