mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-21 18:39:34 +08:00
* 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:
@ -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.
|
||||||
|
@ -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 *
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user