* inf-loop.c (inferior_event_handler): On INF_ERROR and

INF_REG_EVENT throwing, don't call target_async or pop_target.
	Call pop_all_targets_above.
	* remote.c (remote_close): Call remote_terminal_ours.  Don't call
	signal or target_async.
This commit is contained in:
Pedro Alves 2008-11-04 20:52:24 +00:00
parent 1c9f699cd9
commit d3fd534293
3 changed files with 20 additions and 15 deletions

View File

@ -1,3 +1,11 @@
2008-11-04 Pedro Alves <pedro@codesourcery.com>
* inf-loop.c (inferior_event_handler): On INF_ERROR and
INF_REG_EVENT throwing, don't call target_async or pop_target.
Call pop_all_targets_above.
* remote.c (remote_close): Call remote_terminal_ours. Don't call
signal or target_async.
2008-11-04 Daniel Jacobowitz <dan@codesourcery.com>
* eval.c (evaluate_subexp_standard): Assert that there is at

View File

@ -50,8 +50,7 @@ inferior_event_handler (enum inferior_event_type event_type,
{
case INF_ERROR:
printf_unfiltered (_("error detected from target.\n"));
target_async (NULL, 0);
pop_target ();
pop_all_targets_above (file_stratum, 0);
discard_all_intermediate_continuations ();
discard_all_continuations ();
async_enable_stdin ();
@ -65,8 +64,7 @@ inferior_event_handler (enum inferior_event_type event_type,
if (!catch_errors (fetch_inferior_event_wrapper,
client_data, "", RETURN_MASK_ALL))
{
target_async (NULL, 0);
pop_target ();
pop_all_targets_above (file_stratum, 0);
discard_all_intermediate_continuations ();
discard_all_continuations ();
async_enable_stdin ();

View File

@ -232,6 +232,8 @@ static int peek_stop_reply (ptid_t ptid);
static void remote_async_inferior_event_handler (gdb_client_data);
static void remote_async_get_pending_events_handler (gdb_client_data);
static void remote_terminal_ours (void);
/* The non-stop remote protocol provisions for one pending stop reply.
This is where we keep it until it is acknowledged. */
@ -2287,18 +2289,15 @@ extended_remote_restart (void)
static void
remote_close (int quitting)
{
if (remote_desc)
{
/* Unregister the file descriptor from the event loop. */
if (target_is_async_p ())
target_async (NULL, 0);
serial_close (remote_desc);
remote_desc = NULL;
}
if (remote_desc == NULL)
return; /* already closed */
/* Make sure we don't leave the async SIGINT signal handler
installed. */
signal (SIGINT, handle_sigint);
/* Make sure we leave stdin registered in the event loop, and we
don't leave the async SIGINT signal handler installed. */
remote_terminal_ours ();
serial_close (remote_desc);
remote_desc = NULL;
/* We don't have a connection to the remote stub anymore. Get rid
of all the inferiors and their threads we were controlling. */