gdbserver: introduce scoped_restore_current_thread and switch_to_thread
Introduce a class for restoring the current thread and a function to switch to the given thread. This is a preparation for a refactoring that aims to remove direct assignments to 'current_thread'.
This commit is contained in:
parent
200fd2874d
commit
f24791b72e
@ -233,4 +233,26 @@ lwpid_of (const thread_info *thread)
|
|||||||
return thread->id.lwp ();
|
return thread->id.lwp ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Switch the current thread. */
|
||||||
|
|
||||||
|
void switch_to_thread (thread_info *thread);
|
||||||
|
|
||||||
|
/* Save/restore current thread. */
|
||||||
|
|
||||||
|
class scoped_restore_current_thread
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
scoped_restore_current_thread ();
|
||||||
|
~scoped_restore_current_thread ();
|
||||||
|
|
||||||
|
DISABLE_COPY_AND_ASSIGN (scoped_restore_current_thread);
|
||||||
|
|
||||||
|
/* Cancel restoring on scope exit. */
|
||||||
|
void dont_restore () { m_dont_restore = true; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool m_dont_restore = false;
|
||||||
|
thread_info *m_thread;
|
||||||
|
};
|
||||||
|
|
||||||
#endif /* GDBSERVER_GDBTHREAD_H */
|
#endif /* GDBSERVER_GDBTHREAD_H */
|
||||||
|
@ -218,6 +218,14 @@ switch_to_thread (process_stratum_target *ops, ptid_t ptid)
|
|||||||
current_thread = find_thread_ptid (ptid);
|
current_thread = find_thread_ptid (ptid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* See gdbthread.h. */
|
||||||
|
|
||||||
|
void
|
||||||
|
switch_to_thread (thread_info *thread)
|
||||||
|
{
|
||||||
|
current_thread = thread;
|
||||||
|
}
|
||||||
|
|
||||||
/* See inferiors.h. */
|
/* See inferiors.h. */
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -243,3 +251,16 @@ set_inferior_cwd (std::string cwd)
|
|||||||
{
|
{
|
||||||
current_inferior_cwd = std::move (cwd);
|
current_inferior_cwd = std::move (cwd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
scoped_restore_current_thread::scoped_restore_current_thread ()
|
||||||
|
{
|
||||||
|
m_thread = current_thread;
|
||||||
|
}
|
||||||
|
|
||||||
|
scoped_restore_current_thread::~scoped_restore_current_thread ()
|
||||||
|
{
|
||||||
|
if (m_dont_restore)
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch_to_thread (m_thread);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user