prepare_for_detach: don't release scoped_restore at the end

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.
This commit is contained in:
Pedro Alves
2021-01-11 18:52:12 +00:00
parent d758e62c0e
commit 9147506842
2 changed files with 6 additions and 6 deletions

View File

@ -3607,13 +3607,8 @@ prepare_for_detach (void)
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.