[ruby-cvs:78384] 36da0b3da1 (master): check interrupts at each frame pop timing.
"Koichi Sasada" <[email protected]>
| Newsgroups | gmane.comp.lang.ruby.cvs |
|---|---|
| Message-ID | <[email protected]> |
Koichi Sasada 2019-11-29 17:39:06 +0900 (Fri, 29 Nov 2019)
New Revision: 36da0b3da1
https://github.com/ruby/ruby/commit/36da0b3da1
Log:
check interrupts at each frame pop timing.
Asynchronous events such as signal trap, finalization timing,
thread switching and so on are managed by "interrupt_flag".
Ruby's threads check this flag periodically and if a thread
does not check this flag, above events doesn't happen.
This checking is CHECK_INTS() (related) macro and it is placed
at some places (laeve instruction and so on). However, at the end
of C methods, C blocks (IMEMO_IFUNC) etc there are no checking
and it can introduce uninterruptible thread.
To modify this situation, we decide to place CHECK_INTS() at
vm_pop_frame(). It increases interrupt checking points.
[Bug #16366]
This patch can introduce unexpected events...
Modified files:
enum.c
ext/-test-/postponed_job/postponed_job.c
insns.def
spec/ruby/core/thread/raise_spec.rb
test/-ext-/postponed_job/test_postponed_job.rb
test/ruby/test_thread.rb
vm_insnhelper.c