mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-11-16 12:34:43 +00:00
btrace, infrun: simplify scheduler-locking replay
When scheduler-locking is set to replay and we're resuming a thread at the end of its execution history, we check whether anything is replaying in user_visible_resume_ptid() only to check again in clear_proceed_status() before we stop replaying the current process. What really matters is whether the selected thread is replaying or will start replaying. Simplify this by removing redundant checks. Also avoid a redundant pass over all threads to check whether anything is replaying before stopping replaying. Make record_stop_replaying() handle the case when we're not replaying gracefully. Approved-By: Tom Tromey <tom@tromey.com>
This commit is contained in:
10
gdb/infrun.c
10
gdb/infrun.c
@@ -2397,7 +2397,7 @@ user_visible_resume_ptid (int step)
|
|||||||
resume_ptid = inferior_ptid;
|
resume_ptid = inferior_ptid;
|
||||||
}
|
}
|
||||||
else if ((scheduler_mode == schedlock_replay)
|
else if ((scheduler_mode == schedlock_replay)
|
||||||
&& target_record_will_replay (minus_one_ptid, execution_direction))
|
&& target_record_will_replay (inferior_ptid, execution_direction))
|
||||||
{
|
{
|
||||||
/* User-settable 'scheduler' mode requires solo thread resume in replay
|
/* User-settable 'scheduler' mode requires solo thread resume in replay
|
||||||
mode. */
|
mode. */
|
||||||
@@ -3109,16 +3109,14 @@ notify_about_to_proceed ()
|
|||||||
void
|
void
|
||||||
clear_proceed_status (int step)
|
clear_proceed_status (int step)
|
||||||
{
|
{
|
||||||
/* With scheduler-locking replay, stop replaying other threads if we're
|
/* With scheduler-locking replay, stop replaying other threads in the
|
||||||
not replaying the user-visible resume ptid.
|
same process if we're not replaying the selected thread.
|
||||||
|
|
||||||
This is a convenience feature to not require the user to explicitly
|
This is a convenience feature to not require the user to explicitly
|
||||||
stop replaying the other threads. We're assuming that the user's
|
stop replaying the other threads. We're assuming that the user's
|
||||||
intent is to resume tracing the recorded process. */
|
intent is to resume tracing the recorded process. */
|
||||||
if (!non_stop && scheduler_mode == schedlock_replay
|
if (!non_stop && scheduler_mode == schedlock_replay
|
||||||
&& target_record_is_replaying (minus_one_ptid)
|
&& !target_record_will_replay (inferior_ptid, execution_direction))
|
||||||
&& !target_record_will_replay (user_visible_resume_ptid (step),
|
|
||||||
execution_direction))
|
|
||||||
target_record_stop_replaying ();
|
target_record_stop_replaying ();
|
||||||
|
|
||||||
if (!non_stop && inferior_ptid != null_ptid)
|
if (!non_stop && inferior_ptid != null_ptid)
|
||||||
|
|||||||
@@ -2074,7 +2074,8 @@ record_full_base_target::goto_record (ULONGEST target_insn)
|
|||||||
void
|
void
|
||||||
record_full_base_target::record_stop_replaying ()
|
record_full_base_target::record_stop_replaying ()
|
||||||
{
|
{
|
||||||
goto_record_end ();
|
if (RECORD_FULL_IS_REPLAY)
|
||||||
|
goto_record_end ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* "resume" method for prec over corefile. */
|
/* "resume" method for prec over corefile. */
|
||||||
|
|||||||
Reference in New Issue
Block a user