* thread.c (free_thread): New function.

(init_thread_list): Always zero highest_thread_num.  Call
	free_thread() instead of free().
	(delete_thread): Move thread cleanup code to free_thread().
This commit is contained in:
Nicholas Duffek 2000-07-19 21:03:06 +00:00
parent f7db6139df
commit 7c952b6dae
2 changed files with 26 additions and 15 deletions

View file

@ -1,3 +1,10 @@
2000-07-19 Nicholas Duffek <nsd@redhat.com>
* thread.c (free_thread): New function.
(init_thread_list): Always zero highest_thread_num. Call
free_thread() instead of free().
(delete_thread): Move thread cleanup code to free_thread().
2000-07-19 Elena Zannoni <ezannoni@kwikemart.cygnus.com> 2000-07-19 Elena Zannoni <ezannoni@kwikemart.cygnus.com>
Multiarch the sh target. Multiarch the sh target.

View file

@ -63,22 +63,38 @@ static void restore_current_thread (int);
static void switch_to_thread (int pid); static void switch_to_thread (int pid);
static void prune_threads (void); static void prune_threads (void);
static void
free_thread (struct thread_info *tp)
{
/* NOTE: this will take care of any left-over step_resume breakpoints,
but not any user-specified thread-specific breakpoints. */
if (tp->step_resume_breakpoint)
delete_breakpoint (tp->step_resume_breakpoint);
/* FIXME: do I ever need to call the back-end to give it a
chance at this private data before deleting the thread? */
if (tp->private)
free (tp->private);
free (tp);
}
void void
init_thread_list () init_thread_list ()
{ {
struct thread_info *tp, *tpnext; struct thread_info *tp, *tpnext;
highest_thread_num = 0;
if (!thread_list) if (!thread_list)
return; return;
for (tp = thread_list; tp; tp = tpnext) for (tp = thread_list; tp; tp = tpnext)
{ {
tpnext = tp->next; tpnext = tp->next;
free (tp); free_thread (tp);
} }
thread_list = NULL; thread_list = NULL;
highest_thread_num = 0;
} }
/* add_thread now returns a pointer to the new thread_info, /* add_thread now returns a pointer to the new thread_info,
@ -134,19 +150,7 @@ delete_thread (pid)
else else
thread_list = tp->next; thread_list = tp->next;
/* NOTE: this will take care of any left-over step_resume breakpoints, free_thread (tp);
but not any user-specified thread-specific breakpoints. */
if (tp->step_resume_breakpoint)
delete_breakpoint (tp->step_resume_breakpoint);
/* FIXME: do I ever need to call the back-end to give it a
chance at this private data before deleting the thread? */
if (tp->private)
free (tp->private);
free (tp);
return;
} }
static struct thread_info * static struct thread_info *