static void rb_signal_exec(int sig) { /* rb_vm_thread_t *t; */ /* VALUE exc; */ VALUE cmd = rb_get_trap_cmd(sig); if (cmd == 0) { switch (sig) { case SIGINT: rb_interrupt(); break; case SIGHUP: case SIGQUIT: case SIGTERM: case SIGALRM: case SIGUSR1: case SIGUSR2: /* t = GetThreadPtr(rb_vm_main_thread()); */ /* exc = rb_exc_new2(rb_eSignal, ruby_signal_name(sig)); */ /* rb_vm_thread_raise(t, exc); */ /* rb_raise(rb_eSignal, "%s", signo2signm(sig)); */ break; } } else if (cmd == Qundef) { //rb_thread_signal_exit(th); } else { signal_exec(cmd, rb_vm_trap_level_for_signal(sig), sig); } }
void rb_trap_exit(void) { rb_vm_t *vm = GET_VM(); VALUE trap_exit = vm->trap_list[0].cmd; if (trap_exit) { vm->trap_list[0].cmd = 0; signal_exec(trap_exit, vm->trap_list[0].safe, 0); } }
void rb_trap_exit(void) { #ifndef MACOS_UNUSE_SIGNAL if (trap_list[0].cmd) { VALUE trap_exit = trap_list[0].cmd; trap_list[0].cmd = 0; signal_exec(trap_exit, 0); } #endif }
void tp_exec(threadpool_t pool, LIST *list) { struct threadpool *tp = (struct threadpool *) pool; enter_critical_section(tp); tp->list = list->first; /* tp->wait_count = list->size; */ tp->wait_count = tp->thread_count; signal_exec(tp); exec_loop(tp, 0); if (tp->wait_count) wait_for_completion(tp); leave_critical_section(tp); }
void rb_trap_exit(void) { #if 0//ndef MACOS_UNUSE_SIGNAL VALUE trap_exit; int safe; trap_exit = rb_vm_trap_cmd_for_signal(0); if (trap_exit != (VALUE)NULL) { safe = rb_vm_trap_level_for_signal(0); rb_vm_set_trap_for_signal((VALUE)0, safe, 0); signal_exec(trap_exit, safe, 0); } #endif }
void tp_release(threadpool_t pool) { struct threadpool *tp = (struct threadpool *) pool; enter_critical_section(tp); tp->thread_die = ~0; tp->list = NULL; tp->wait_count = tp->thread_count; signal_exec(tp); if (tp->wait_count) wait_for_completion(tp); leave_critical_section(tp); sync_done(tp); free(tp); }
void rb_signal_exec(rb_thread_t *th, int sig) { rb_vm_t *vm = GET_VM(); VALUE cmd = vm->trap_list[sig].cmd; int safe = vm->trap_list[sig].safe; if (cmd == 0) { switch (sig) { case SIGINT: rb_interrupt(); break; #ifdef SIGHUP case SIGHUP: #endif #ifdef SIGQUIT case SIGQUIT: #endif #ifdef SIGTERM case SIGTERM: #endif #ifdef SIGALRM case SIGALRM: #endif #ifdef SIGUSR1 case SIGUSR1: #endif #ifdef SIGUSR2 case SIGUSR2: #endif rb_threadptr_signal_raise(th, sig); break; } } else if (cmd == Qundef) { rb_threadptr_signal_exit(th); } else { signal_exec(cmd, safe, sig); } }
void rb_signal_exec(rb_thread_t *th, int sig) { VALUE cmd = rb_get_trap_cmd(sig); if (cmd == 0) { switch (sig) { case SIGINT: rb_interrupt(); break; #ifdef SIGHUP case SIGHUP: #endif #ifdef SIGQUIT case SIGQUIT: #endif #ifdef SIGTERM case SIGTERM: #endif #ifdef SIGALRM case SIGALRM: #endif #ifdef SIGUSR1 case SIGUSR1: #endif #ifdef SIGUSR2 case SIGUSR2: #endif rb_thread_signal_raise(th, sig); break; } } else if (cmd == Qundef) { rb_thread_signal_exit(th); } else { signal_exec(cmd, sig); } }