fatal("Quantum for multi-eventq simulation not specified");
}
- quantum_event = new GlobalSyncEvent(simQuantum, simQuantum,
+ quantum_event = new GlobalSyncEvent(curTick() + simQuantum, simQuantum,
EventBase::Progress_Event_Pri, 0);
inParallelMode = true;
}
if (async_event && testAndClearAsyncEvent()) {
+ // Take the event queue lock in case any of the service
+ // routines want to schedule new events.
+ std::lock_guard<EventQueue> lock(*eventq);
async_event = false;
if (async_statdump || async_statreset) {
Stats::schedStatEvent(async_statdump, async_statreset);
exitSimLoop("user interrupt received");
}
- if (async_io || async_alarm) {
+ if (async_io) {
async_io = false;
- async_alarm = false;
pollQueue.service();
}