fix memory leak

This commit is contained in:
Matthew Flatt 2010-07-05 18:50:10 -06:00
parent a29c165985
commit 6915250300
2 changed files with 12 additions and 7 deletions

View File

@ -368,7 +368,7 @@ static void *mz_proc_thread_signal_worker(void *data) {
int status;
int pid, check_pid, is_group;
sigset_t set;
Child_Status *group_status, *prev_group;
Child_Status *group_status, *prev_group, *next;
sigemptyset(&set);
sigaddset(&set, SIGCHLD);
@ -423,11 +423,13 @@ static void *mz_proc_thread_signal_worker(void *data) {
} else if (pid > 0) {
/* printf("SIGCHILD pid %i with status %i %i\n", pid, status, WEXITSTATUS(status)); */
if (is_group) {
group_status = group_status->next;
next = group_status->next;
if (prev_group)
prev_group->next_group = group_status;
prev_group->next_group = next;
else
child_group_statuses = group_status;
child_group_statuses = next;
free(group_status);
group_status = next;
} else
add_child_status(pid, status);
} else {

View File

@ -6865,11 +6865,14 @@ static void check_child_done(pid_t pid)
if (result > 0) {
if (is_group) {
/* done with an inaccessible group id */
unused = (void **)unused[1];
void *next;
next = (void **)unused[1];
if (unused_prev)
unused_prev[1] = unused;
unused_prev[1] = unused[1];
else
unused_groups = unused;
unused_groups = unused[1];
free(unused);
unused = (void **)next;
}
START_XFORM_SKIP;