Skip to content

Commit 2e98f58

Browse files
committed
#2389: trace: fix time that can be ordered improperly with changes
1 parent 2eb8847 commit 2e98f58

File tree

3 files changed

+9
-4
lines changed

3 files changed

+9
-4
lines changed

src/vt/context/runnable_context/trace.cc

+2-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@ void Trace::start(TimeType time) {
7474
if (theSched()->getSchedulerDepth() == 0 and not theTrace()->inInvokeContext()) {
7575
at_sched_depth_zero_ = true;
7676
theTrace()->setInInvokeContext(true);
77-
theTrace()->beginSchedulerLoop();
77+
auto const end_between_sched_time = theTrace()->beginSchedulerLoop();
78+
time = std::max(time, end_between_sched_time);
7879
}
7980

8081
auto const trace_id = auto_registry::handlerTraceID(handler_);

src/vt/trace/trace.cc

+4-2
Original file line numberDiff line numberDiff line change
@@ -429,13 +429,15 @@ void Trace::pendingSchedulerLoop() {
429429
between_sched_event_ = TraceProcessingTag{};
430430
}
431431

432-
void Trace::beginSchedulerLoop() {
432+
TimeType Trace::beginSchedulerLoop() {
433+
auto const cur_time = timing::getCurrentTime();
433434
// Always end between-loop event. The pending case is not always triggered.
434-
endProcessing(between_sched_event_, timing::getCurrentTime());
435+
endProcessing(between_sched_event_, cur_time);
435436
between_sched_event_ = TraceProcessingTag{};
436437

437438
// Capture the current open event depth.
438439
event_holds_.push_back(open_events_.size());
440+
return cur_time;
439441
}
440442

441443
void Trace::endSchedulerLoop() {

src/vt/trace/trace.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,10 @@ struct Trace : runtime::component::Component<Trace>, TraceLite {
172172

173173
/**
174174
* \brief Scheduler trigger for \c sched::SchedulerEvent::BeginSchedulerLoop
175+
*
176+
* \return the time the between scheduler event was ended
175177
*/
176-
void beginSchedulerLoop();
178+
TimeType beginSchedulerLoop();
177179

178180
/**
179181
* \brief Scheduler trigger for \c sched::SchedulerEvent::EndSchedulerLoop

0 commit comments

Comments
 (0)