Issue #10595 has been updated by Nobuyoshi Nakada.


Yes, but interruptions of finalizers could cause serious undesirable results.

----------------------------------------
Bug #10595: interrupts not handled while finalizers running
https://bugs.ruby-lang.org/issues/10595#change-50422

* Author: Eric Wong
* Status: Closed
* Priority: Normal
* Assignee: 
* Category: core
* Target version: current: 2.2.0
* ruby -v: trunk
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
Originally noted in [ruby-core:66635]

Trying to Ctrl-C something like the following loop is not always successful:

~~~
f = proc { 1000.times {} }
loop do
  ObjectSpace.define_finalizer(Object.new, f)
end
~~~

The Interrupt is created and raised, but lost during the postponed
job processing (rb_postponed_job_flush).

Trying to mask out all interrupt flags (instead of just
th->interrupt_mask |= POSTPONED_JOB_INTERRUPT_MASK) allows the
interrupt to be handled, but this is not suitable for expensive
finalizers.

So I haven't figured out how to fix this, yet... Help appreciated, thanks.




-- 
https://bugs.ruby-lang.org/