]> Kevux Git Server - fll/commitdiff
Bugfix: Guarantee that the child processes are terminated.
authorKevin Day <thekevinday@gmail.com>
Tue, 19 Jul 2022 03:35:29 +0000 (22:35 -0500)
committerKevin Day <thekevinday@gmail.com>
Tue, 19 Jul 2022 03:35:29 +0000 (22:35 -0500)
The terminate signal is not being received for unknown reasons.
The signals are unblocked for the child process.
And yet, it continues to block.

The final part of the terminate due to signal is to forcibly terminate (sending the kill signal).
This is now happening for child processes.

Sending the kill signal allieviates the problem where the controller program will not terminate.
This fix causes the reduces the severity of the problem such that the terminate should still terminate.
However, this fix does not solve the problem with the terminate signal not being received by a child process that is not blocking the signal as far as I can tell.

level_3/controller/c/thread/private-thread_process.c

index a172386cf904386ad015ea7829a3677469d234df..57e046fa3768af134c19f507b03a58ae6de4b496 100644 (file)
@@ -233,7 +233,16 @@ extern "C" {
       }
 
       for (j = 0; j < process->childs.size; ++j) {
-        process->childs.array[j] = 0;
+
+        if (process->childs.array[j]) {
+
+          // A hackish way to determine if the child process exists, and if it does then forcibly terminate it.
+          if (getpgid(process->childs.array[j]) >= 0) {
+            f_signal_send(F_signal_kill, process->childs.array[j]);
+          }
+
+          process->childs.array[j] = 0;
+        }
       } // for
 
       process->childs.used = 0;