From 9b74e597bea979229d87ede77e8af2c241e3f45e Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 24 May 2006 10:13:18 -0400 Subject: [PATCH] BUG: Do not leak global table of processes. --- Source/kwsys/ProcessUNIX.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Source/kwsys/ProcessUNIX.c b/Source/kwsys/ProcessUNIX.c index 100a495dd..49b939e65 100644 --- a/Source/kwsys/ProcessUNIX.c +++ b/Source/kwsys/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); } }