Use forward_scope_exit for scoped_finish_thread_state

This reimplements the manually-written scoped_finish_thread_state
class as a forward_scope_exit instantiation.  forward_scope_exit has
the same interface as scoped_finish_thread_state, so nothing else has
to change.

A forward_scope_exit is preferred over make_scope_exit here because
infrun.c:normal_stop needs to wrap scoped_finish_thread_state in a
gdb::optional.  Since we need the type there, might as well use it
everywhere.

gdb/ChangeLog:
2019-01-23  Pedro Alves  <palves@redhat.com>
	    Andrew Burgess  <andrew.burgess@embecosm.com>

	* gdbthread.h: Include "common/forward-scope-exit.h".
	(scoped_finish_thread_state): Redefine custom class in terms of
	forward_scope_exit.
This commit is contained in:
Pedro Alves 2019-01-23 18:58:30 +00:00
parent 5b9b3e53a6
commit 77f0e74cbe
2 changed files with 10 additions and 25 deletions

View File

@ -1,3 +1,10 @@
2019-01-23 Pedro Alves <palves@redhat.com>
Andrew Burgess <andrew.burgess@embecosm.com>
* gdbthread.h: Include "common/forward-scope-exit.h".
(scoped_finish_thread_state): Redefine custom class in terms of
forward_scope_exit.
2019-01-23 Pedro Alves <palves@redhat.com>
Andrew Burgess <andrew.burgess@embecosm.com>

View File

@ -32,6 +32,7 @@ struct symtab;
#include "cli/cli-utils.h"
#include "common/refcounted-object.h"
#include "common-gdbthread.h"
#include "common/forward-scope-exit.h"
struct inferior;
@ -612,31 +613,8 @@ extern void finish_thread_state (ptid_t ptid);
/* Calls finish_thread_state on scope exit, unless release() is called
to disengage. */
class scoped_finish_thread_state
{
public:
explicit scoped_finish_thread_state (ptid_t ptid)
: m_ptid (ptid)
{}
~scoped_finish_thread_state ()
{
if (!m_released)
finish_thread_state (m_ptid);
}
/* Disengage. */
void release ()
{
m_released = true;
}
DISABLE_COPY_AND_ASSIGN (scoped_finish_thread_state);
private:
bool m_released = false;
ptid_t m_ptid;
};
using scoped_finish_thread_state
= FORWARD_SCOPE_EXIT (finish_thread_state);
/* Commands with a prefix of `thread'. */
extern struct cmd_list_element *thread_cmd_list;