From: nobu@... Date: 2014-12-13T21:32:16+00:00 Subject: [ruby-core:66827] [ruby-trunk - Bug #10595] [Closed] interrupts not handled while finalizers running Issue #10595 has been updated by Nobuyoshi Nakada. Status changed from Open to Closed % Done changed from 0 to 100 Applied in changeset r48829. ---------- vm_trace.c: defer interrupts while postponed jobs * vm_trace.c (rb_postponed_job_flush): mask signal trap interrupt too to defer handling after finalizers finished. [ruby-core:66825] [Bug #10595] ---------------------------------------- Bug #10595: interrupts not handled while finalizers running https://bugs.ruby-lang.org/issues/10595#change-50395 * 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/