After detaching from a process, the inf->detaching flag is
inadvertently left set to true. If you afterwards reuse the same
inferior to start a new process, GDB will mishave...
The problem is that prepare_for_detach discards the scoped_restore at
the end, while the intention is for the flag to be set only for the
duration of prepare_for_detach.
This was already a bug in the original commit that added
prepare_for_detach, commit
24291992dac3 ("PR gdb/11321"), by yours
truly. Back then, we still used cleanups, and the function called
discard_cleanups instead of do_cleanups, by mistake.
gdb/ChangeLog:
* infrun.c (prepare_for_detach): Don't release scoped_restore
before returning.
+2021-02-03 Pedro Alves <pedro@palves.net>
+
+ * infrun.c (prepare_for_detach): Don't release scoped_restore
+ before returning.
+
2021-02-03 Pedro Alves <pedro@palves.net>
* infrun.c (handle_one): New function, factored out from ...
at this point, and signals are passed directly to the
inferior, so this must mean the process is gone. */
if (!ecs->wait_some_more)
- {
- restore_detaching.release ();
- error (_("Program exited while detaching"));
- }
+ error (_("Program exited while detaching"));
}
-
- restore_detaching.release ();
}
/* Wait for control to return from inferior to debugger.