* linux-low.c (linux_remove_process): Remove `detaching'

parameter.  Don't release/detach from thread_db here.
	(linux_kill): Release/detach from thread_db here, ...
	(linux_detach): ... and here, before actually detaching.
	(linux_wait_1): ... and here, when a process exits.
	* thread-db.c (any_thread_of): New.
	(thread_db_free): Switch the current inferior to a thread of the
	passed in process.
This commit is contained in:
Pedro Alves
2009-12-28 16:09:27 +00:00
parent 9e0544c1f9
commit ca5c370d27
3 changed files with 45 additions and 8 deletions

View File

@ -258,14 +258,10 @@ linux_add_process (int pid, int attached)
also freeing all private data. */
static void
linux_remove_process (struct process_info *process, int detaching)
linux_remove_process (struct process_info *process)
{
struct process_info_private *priv = process->private;
#ifdef USE_THREAD_DB
thread_db_free (process, detaching);
#endif
free (priv->arch_private);
free (priv);
remove_process (process);
@ -736,8 +732,11 @@ linux_kill (int pid)
lwpid = linux_wait_for_event (lwp->head.id, &wstat, __WALL);
} while (lwpid > 0 && WIFSTOPPED (wstat));
#ifdef USE_THREAD_DB
thread_db_free (process, 0);
#endif
delete_lwp (lwp);
linux_remove_process (process, 0);
linux_remove_process (process);
return 0;
}
@ -821,12 +820,16 @@ linux_detach (int pid)
if (process == NULL)
return -1;
#ifdef USE_THREAD_DB
thread_db_free (process, 1);
#endif
current_inferior =
(struct thread_info *) find_inferior (&all_threads, any_thread_of, &pid);
delete_all_breakpoints ();
find_inferior (&all_threads, linux_detach_one_lwp, &pid);
linux_remove_process (process, 1);
linux_remove_process (process);
return 0;
}
@ -1451,8 +1454,11 @@ retry:
int pid = pid_of (lwp);
struct process_info *process = find_process_pid (pid);
#ifdef USE_THREAD_DB
thread_db_free (process, 0);
#endif
delete_lwp (lwp);
linux_remove_process (process, 0);
linux_remove_process (process);
current_inferior = NULL;