* inferiors.c (remove_process): Fix memory leak, free process.

* linux-low.c (linux_remove_process): New function.
	(linux_kill): Call it instead of remove_process.
	(linux_detach, linux_wait_1): Ditto.
This commit is contained in:
Doug Evans
2009-04-30 18:35:55 +00:00
parent dc621c3587
commit 5091eb23aa
3 changed files with 25 additions and 3 deletions

View File

@ -1,3 +1,10 @@
2009-04-30 Doug Evans <dje@google.com>
* inferiors.c (remove_process): Fix memory leak, free process.
* linux-low.c (linux_remove_process): New function.
(linux_kill): Call it instead of remove_process.
(linux_detach, linux_wait_1): Ditto.
2009-04-19 Danny Backx <dannybackx@users.sourceforge.net> 2009-04-19 Danny Backx <dannybackx@users.sourceforge.net>
* configure.srv: Add x86 Windows CE target. * configure.srv: Add x86 Windows CE target.

View File

@ -427,12 +427,17 @@ add_process (int pid, int attached)
return process; return process;
} }
/* Remove a process from the common process list and free the memory
allocated for it.
The caller is responsible for freeing private data first. */
void void
remove_process (struct process_info *process) remove_process (struct process_info *process)
{ {
clear_symbol_cache (&process->symbol_cache); clear_symbol_cache (&process->symbol_cache);
free_all_breakpoints (process); free_all_breakpoints (process);
remove_inferior (&all_processes, &process->head); remove_inferior (&all_processes, &process->head);
free (process);
} }
struct process_info * struct process_info *

View File

@ -182,6 +182,16 @@ linux_add_process (int pid, int attached)
return proc; return proc;
} }
/* Remove a process from the common process list,
also freeing all private data. */
static void
linux_remove_process (struct process_info *process)
{
free (process->private);
remove_process (process);
}
/* Handle a GNU/Linux extended wait response. If we see a clone /* Handle a GNU/Linux extended wait response. If we see a clone
event, we need to add the new LWP to our list (and not report the event, we need to add the new LWP to our list (and not report the
trap to higher layers). */ trap to higher layers). */
@ -565,7 +575,7 @@ linux_kill (int pid)
} while (lwpid > 0 && WIFSTOPPED (wstat)); } while (lwpid > 0 && WIFSTOPPED (wstat));
delete_lwp (lwp); delete_lwp (lwp);
remove_process (process); linux_remove_process (process);
return 0; return 0;
} }
@ -654,7 +664,7 @@ linux_detach (int pid)
delete_all_breakpoints (); delete_all_breakpoints ();
find_inferior (&all_threads, linux_detach_one_lwp, &pid); find_inferior (&all_threads, linux_detach_one_lwp, &pid);
remove_process (process); linux_remove_process (process);
return 0; return 0;
} }
@ -1273,7 +1283,7 @@ retry:
struct process_info *process = find_process_pid (pid); struct process_info *process = find_process_pid (pid);
delete_lwp (lwp); delete_lwp (lwp);
remove_process (process); linux_remove_process (process);
current_inferior = NULL; current_inferior = NULL;