Fix stdin ending up not registered after a Quit

If you press Ctrl-C while GDB is processing breakpoint commands the
TRY/CATCH in inferior_event_handler catches the Quit exception and
prints it, and then if the interpreter was running a foreground
execution command, nothing re-adds stdin back in the event loop,
meaning the debug session ends up busted, because the user can't type
anything...

This was exposed by the new gdb.base/bp-cmds-continue-ctrl-c.exp
testcase added later in the series.

gdb/ChangeLog:
2017-11-16  Pedro Alves  <palves@redhat.com>

	* inf-loop.c (inferior_event_handler): Don't swallow the exception
	if the prompt is blocked.
This commit is contained in:
Pedro Alves 2017-11-16 18:44:43 +00:00
parent 688fca4fe6
commit 38dc2859c4
2 changed files with 14 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2017-11-16 Pedro Alves <palves@redhat.com>
* inf-loop.c (inferior_event_handler): Don't swallow the exception
if the prompt is blocked.
2017-11-16 Pedro Alves <palves@redhat.com>
* breakpoint.c (insert_bp_location): Replace bp_err and

View File

@ -73,7 +73,15 @@ inferior_event_handler (enum inferior_event_type event_type,
}
CATCH (e, RETURN_MASK_ALL)
{
exception_print (gdb_stderr, e);
/* If the user was running a foreground execution
command, then propagate the error so that the prompt
can be reenabled. Otherwise, the user already has
the prompt and is typing some unrelated command, so
just inform the user and swallow the exception. */
if (current_ui->prompt_state == PROMPT_BLOCKED)
throw_exception (e);
else
exception_print (gdb_stderr, e);
}
END_CATCH
}