diff options
-rw-r--r-- | src/sim/simulate.cc | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/src/sim/simulate.cc b/src/sim/simulate.cc index 426c3e662..7d88dc11d 100644 --- a/src/sim/simulate.cc +++ b/src/sim/simulate.cc @@ -192,37 +192,36 @@ doSimLoop(EventQueue *eventq) assert(curTick() <= eventq->nextTick() && "event scheduled in the past"); - Event *exit_event = eventq->serviceOne(); - if (exit_event != NULL) { - return exit_event; - } - 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); async_statdump = false; async_statreset = false; } - if (async_exit) { - async_exit = false; - exitSimLoop("user interrupt received"); - } - if (async_io) { async_io = false; pollQueue.service(); } + if (async_exit) { + async_exit = false; + exitSimLoop("user interrupt received"); + } + if (async_exception) { async_exception = false; return NULL; } } + + Event *exit_event = eventq->serviceOne(); + if (exit_event != NULL) { + return exit_event; + } } // not reached... only exit is return on SimLoopExitEvent |