From 9f0065a077f00a077f507461846234c52509ce90 Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Mon, 11 Dec 2023 21:12:08 -0800 Subject: [PATCH] Initialize interrupt queue before signal handlers (#9196) --- inits.c | 2 +- signal.c | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/inits.c b/inits.c index a114b780aab408..9ed104f369e02f 100644 --- a/inits.c +++ b/inits.c @@ -51,7 +51,6 @@ rb_call_inits(void) CALL(Dir); CALL(Time); CALL(Random); - CALL(signal); CALL(load); CALL(Proc); CALL(Binding); @@ -63,6 +62,7 @@ rb_call_inits(void) CALL(VM); CALL(ISeq); CALL(Thread); + CALL(signal); CALL(Fiber_Scheduler); CALL(process); CALL(Cont); diff --git a/signal.c b/signal.c index fa7d25caf5f586..a4822cf6bcafee 100644 --- a/signal.c +++ b/signal.c @@ -1488,6 +1488,9 @@ Init_signal(void) rb_alias(rb_eSignal, rb_intern_const("signm"), rb_intern_const("message")); rb_define_method(rb_eInterrupt, "initialize", interrupt_init, -1); + // It should be ready to call rb_signal_exec() + VM_ASSERT(GET_THREAD()->pending_interrupt_queue); + /* At this time, there is no subthread. Then sigmask guarantee atomics. */ rb_disable_interrupt();