// Send F_signal_reserved_35 to cleanup process to reap child processes.
if (information.si_signo == F_signal_child || information.si_signo == F_signal_reserved_35) {
-
if (f_thread_mutex_lock(&main->thread.lock.reap) == F_okay) {
f_thread_condition_signal_all(&main->thread.lock.reap_condition);
f_thread_mutex_unlock(&main->thread.lock.reap);
// Prevent thread from being interrupted and auto-cancelled.
f_thread_cancel_state_set(PTHREAD_CANCEL_DEFERRED, 0);
+ // Send F_signal_reserved_35 to cleanup process to reap child processes.
+ if (information.si_signo == F_signal_child || information.si_signo == F_signal_reserved_35) {
+ if (f_thread_mutex_lock(&main->thread.lock.reap) == F_okay) {
+ f_thread_condition_signal_all(&main->thread.lock.reap_condition);
+ f_thread_mutex_unlock(&main->thread.lock.reap);
+ }
+
+ continue;
+ }
+
if (information.si_signo == F_signal_interrupt || information.si_signo == F_signal_abort || information.si_signo == F_signal_quit || information.si_signo == F_signal_termination) {
main->thread.signal = information.si_signo;
+ if (f_thread_mutex_lock_try(&main->thread.lock.reap) == F_okay) {
+ f_thread_condition_signal_all(&main->thread.lock.reap_condition);
+ f_thread_mutex_unlock(&main->thread.lock.reap);
+ }
+
controller_thread_instance_cancel(main, is_normal, controller_thread_cancel_signal_e);
break;