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