From 69152503008082fb617639899e1fd89175f07041 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Mon, 5 Jul 2010 18:50:10 -0600 Subject: [PATCH] fix memory leak --- src/racket/src/places.c | 10 ++++++---- src/racket/src/port.c | 9 ++++++--- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/racket/src/places.c b/src/racket/src/places.c index 1b4b718a33..097f70137e 100644 --- a/src/racket/src/places.c +++ b/src/racket/src/places.c @@ -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 { diff --git a/src/racket/src/port.c b/src/racket/src/port.c index 20b54c93cd..e32fb6d707 100644 --- a/src/racket/src/port.c +++ b/src/racket/src/port.c @@ -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;