Index: signal.c =================================================================== --- signal.c (revision 26907) +++ signal.c (working copy) @@ -1065,6 +1065,20 @@ ruby_sig_finalize(void) } } +void +rb_signal_redefine_for_thread(void) +{ + static const int redefine_list[] = {SIGILL}; + rb_vm_t *vm = GET_VM(); + int i; + + for (i = 0; i < sizeof(redefine_list) / sizeof(int); i++) { + int sig = redefine_list[i]; + if (vm->trap_list[sig].cmd) { + ruby_signal(sig, sighandler); + } + } +} #ifdef RUBY_DEBUG_ENV int ruby_enable_coredump = 0; Index: thread_win32.c =================================================================== --- thread_win32.c (revision 26907) +++ thread_win32.c (working copy) @@ -466,6 +466,7 @@ thread_start_func_1(void *th_ptr) volatile HANDLE thread_id = th->thread_id; native_thread_init_stack(th); + rb_signal_redefine_for_thread(); th->native_thread_data.interrupt_event = CreateEvent(0, TRUE, FALSE, 0); /* run */