mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-19 05:37:54 +00:00
parent
12df9bf450
commit
aa6f99b0a4
@ -558,21 +558,24 @@ struct ask : Command_without_separator
|
||||
|
||||
state.gdb_connected = true;
|
||||
|
||||
bool handled = false;
|
||||
bool stop_reply_sent = false;
|
||||
|
||||
state.inferiors.for_each<Inferior_pd const &>([&] (Inferior_pd const &inferior) {
|
||||
inferior.for_each_thread([&] (Monitored_thread &thread) {
|
||||
|
||||
if (handled)
|
||||
return;
|
||||
|
||||
using Stop_state = Monitored_thread::Stop_state;
|
||||
using Stop_reply_signal = Monitored_thread::Stop_reply_signal;
|
||||
|
||||
if (thread.stop_state == Stop_state::RUNNING)
|
||||
return;
|
||||
|
||||
thread.stop_state = Stop_state::STOPPED_REPLY_SENT;
|
||||
/* found a stopped thread */
|
||||
|
||||
if (!stop_reply_sent) {
|
||||
|
||||
/* send a stop reply for one stopped thread */
|
||||
|
||||
state.notification_in_progress = true;
|
||||
|
||||
long unsigned int pid = inferior.id();
|
||||
long unsigned int tid = thread.id();
|
||||
@ -584,13 +587,25 @@ struct ask : Command_without_separator
|
||||
print(out, "swbreak:;");
|
||||
});
|
||||
|
||||
handled = true;
|
||||
thread.stop_state = Stop_state::STOPPED_REPLY_SENT;
|
||||
|
||||
stop_reply_sent = true;
|
||||
|
||||
} else {
|
||||
|
||||
/* report other stopped threads on 'vStopped' */
|
||||
|
||||
thread.stop_state = Stop_state::STOPPED_REPLY_PENDING;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
if (!handled)
|
||||
if (!stop_reply_sent) {
|
||||
/* all threads are running */
|
||||
state.notification_in_progress = false;
|
||||
gdb_ok(out);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user