Suppress normal stop observer when it's problematic.

* inferior.h (suppress_normal_stop_observer): New.
        * infcall.c (call_function_by_hand): Disable stop events when
        doing function calls.
        * infmcd.c (suppress_normal_stop_observer): New.
        (finish_command_continuation): Call normal_stop observer
        explicitly.
        (finish_command): Disable stop events inside proceed.
        * infrun.c (normal_stop): Don't call normal stop observer if
        suppressed of if multi-step is in progress.
This commit is contained in:
Vladimir Prus
2008-06-10 09:32:05 +00:00
parent 3d3191a6ad
commit f5871ec07b
5 changed files with 34 additions and 2 deletions

View File

@@ -706,6 +706,7 @@ call_function_by_hand (struct value *function, int nargs, struct value **args)
{
struct cleanup *old_cleanups = make_cleanup (null_cleanup, 0);
struct cleanup *old_cleanups2;
int saved_async = 0;
/* If all error()s out of proceed ended up calling normal_stop
@@ -718,8 +719,12 @@ call_function_by_hand (struct value *function, int nargs, struct value **args)
if (target_can_async_p ())
saved_async = target_async_mask (0);
old_cleanups2 = make_cleanup_restore_integer
(&suppress_normal_stop_observer);
suppress_normal_stop_observer = 1;
proceed (real_pc, TARGET_SIGNAL_0, 0);
do_cleanups (old_cleanups2);
if (saved_async)
target_async_mask (saved_async);