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

@ -1,3 +1,8 @@
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> 2021-02-03 Pedro Alves <pedro@palves.net>
* infrun.c (handle_one): New function, factored out from ... * infrun.c (handle_one): New function, factored out from ...

View File

@ -3607,13 +3607,8 @@ prepare_for_detach (void)
at this point, and signals are passed directly to the at this point, and signals are passed directly to the
inferior, so this must mean the process is gone. */ inferior, so this must mean the process is gone. */
if (!ecs->wait_some_more) 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. /* Wait for control to return from inferior to debugger.