From ae26c248c1b8dc301b4ea6f8d8e38bc1b442d39c Mon Sep 17 00:00:00 2001
From: Brad King <brad.king@kitware.com>
Date: Wed, 24 May 2006 10:13:18 -0400
Subject: [PATCH] BUG: Do not leak global table of processes.

---
 ProcessUNIX.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/ProcessUNIX.c b/ProcessUNIX.c
index 68deccb..cfc55e6 100644
--- a/ProcessUNIX.c
+++ b/ProcessUNIX.c
@@ -2213,9 +2213,6 @@ static void kwsysProcessesRemove(kwsysProcess* cp)
       newProcesses.Processes[i] = newProcesses.Processes[i+1];
       }
 
-    /* Store the new set in that seen by the signal handler.  */
-    kwsysProcessesUpdate(&newProcesses);
-
     /* If this was the last process, disable the signal handler.  */
     if(newProcesses.Count == 0)
       {
@@ -2223,7 +2220,16 @@ static void kwsysProcessesRemove(kwsysProcess* cp)
          interrupted.  */
       while((sigaction(SIGCHLD, &kwsysProcessesOldSigChldAction, 0) < 0) &&
             (errno == EINTR));
+
+      /* Free the table of process pointers since it is now empty.
+         This is safe because the signal handler has been removed.  */
+      newProcesses.Size = 0;
+      free(newProcesses.Processes);
+      newProcesses.Processes = 0;
       }
+
+    /* Store the new set in that seen by the signal handler.  */
+    kwsysProcessesUpdate(&newProcesses);
     }
   }
 
-- 
GitLab