* remote.c (remote_close): Unregister remote_desc from the event

loop.  Always restore the SIGINT handler.  Discard all inferiors
	here.
	(remote_detach_1, remote_disconnect): Don't unregister the file
	descriptor from the event loop here.
	(interrupt_query, readchar, getpkt_sane): Pop the target instead
	of morning the current inferior.
	(remote_kill): Don't unregister the file descriptor from the event
	loop here.
	(remote_mourn_1): Don't discard inferiors here.
This commit is contained in:
Pedro Alves 2008-10-15 21:39:53 +00:00
parent 1c5cfe8615
commit ce5ce7eded
2 changed files with 35 additions and 23 deletions

View File

@ -1,3 +1,16 @@
2008-10-15 Pedro Alves <pedro@codesourcery.com>
* remote.c (remote_close): Unregister remote_desc from the event
loop. Always restore the SIGINT handler. Discard all inferiors
here.
(remote_detach_1, remote_disconnect): Don't unregister the file
descriptor from the event loop here.
(interrupt_query, readchar, getpkt_sane): Pop the target instead
of morning the current inferior.
(remote_kill): Don't unregister the file descriptor from the event
loop here.
(remote_mourn_1): Don't discard inferiors here.
2008-10-15 Pedro Alves <pedro@codesourcery.com>
* breakpoint.c (breakpoint_init_inferior): Clean up the moribund

View File

@ -2202,8 +2202,23 @@ static void
remote_close (int quitting)
{
if (remote_desc)
serial_close (remote_desc);
remote_desc = NULL;
{
/* Unregister the file descriptor from the event loop. */
if (target_is_async_p ())
target_async (NULL, 0);
serial_close (remote_desc);
remote_desc = NULL;
}
/* Make sure we don't leave the async SIGINT signal handler
installed. */
signal (SIGINT, handle_sigint);
/* We don't have a connection to the remote stub anymore. Get rid
of all the inferiors and their threads we were controlling. */
discard_all_inferiors ();
generic_mourn_inferior ();
}
/* Query the remote side for the text, data and bss offsets. */
@ -3029,10 +3044,6 @@ remote_detach_1 (char *args, int from_tty, int extended)
else
error (_("Can't detach process."));
/* Unregister the file descriptor from the event loop. */
if (target_is_async_p ())
serial_async (remote_desc, NULL, 0);
if (from_tty)
{
if (remote_multi_process_p (rs))
@ -3071,10 +3082,6 @@ remote_disconnect (struct target_ops *target, char *args, int from_tty)
if (args)
error (_("Argument given to \"disconnect\" when remotely debugging."));
/* Unregister the file descriptor from the event loop. */
if (target_is_async_p ())
serial_async (remote_desc, NULL, 0);
/* Make sure we unpush even the extended remote targets; mourn
won't do it. So call remote_mourn_1 directly instead of
target_mourn_inferior. */
@ -3546,8 +3553,7 @@ interrupt_query (void)
if (query ("Interrupted while waiting for the program.\n\
Give up (and stop debugging it)? "))
{
target_mourn_inferior ();
signal (SIGINT, handle_sigint);
pop_target ();
deprecated_throw_reason (RETURN_QUIT);
}
@ -4954,7 +4960,7 @@ readchar (int timeout)
switch ((enum serial_rc) ch)
{
case SERIAL_EOF:
target_mourn_inferior ();
pop_target ();
error (_("Remote connection closed"));
/* no return */
case SERIAL_ERROR:
@ -5387,7 +5393,7 @@ getpkt_sane (char **buf, long *sizeof_buf, int forever)
if (forever) /* Watchdog went off? Kill the target. */
{
QUIT;
target_mourn_inferior ();
pop_target ();
error (_("Watchdog timeout has expired. Target detached."));
}
if (remote_debug)
@ -5437,10 +5443,6 @@ getpkt_sane (char **buf, long *sizeof_buf, int forever)
static void
remote_kill (void)
{
/* Unregister the file descriptor from the event loop. */
if (target_is_async_p ())
serial_async (remote_desc, NULL, 0);
/* Use catch_errors so the user can quit from gdb even when we
aren't on speaking terms with the remote system. */
catch_errors ((catch_errors_ftype *) putpkt, "k", "", RETURN_MASK_ERROR);
@ -5512,12 +5514,9 @@ remote_mourn (void)
static void
remote_mourn_1 (struct target_ops *target)
{
/* Get rid of all the inferiors and their threads we were
controlling. */
discard_all_inferiors ();
unpush_target (target);
generic_mourn_inferior ();
/* remote_close takes care of cleaning up. */
}
static int