diff options
Diffstat (limited to 'src/sim/simulate.cc')
-rw-r--r-- | src/sim/simulate.cc | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/src/sim/simulate.cc b/src/sim/simulate.cc index 7d88dc11d..14dd00fc1 100644 --- a/src/sim/simulate.cc +++ b/src/sim/simulate.cc @@ -71,6 +71,14 @@ thread_loop(EventQueue *queue) } } +GlobalEvent* +getLimitEvent(void) { + static GlobalSimLoopExitEvent + simulate_limit_event(mainEventQueue[0]->getCurTick(), + "simulate() limit reached", 0); + return &simulate_limit_event; +} + /** Simulate for num_cycles additional cycles. If num_cycles is -1 * (the default), do not limit simulation; some other event must * terminate the loop. Exported to Python via SWIG. @@ -105,8 +113,7 @@ simulate(Tick num_cycles) else // counter would roll over or be set to MaxTick anyhow num_cycles = MaxTick; - GlobalEvent *limit_event = new GlobalSimLoopExitEvent(num_cycles, - "simulate() limit reached", 0, 0); + getLimitEvent()->reschedule(num_cycles); GlobalSyncEvent *quantum_event = NULL; if (numMainEventQueues > 1) { @@ -137,13 +144,6 @@ simulate(Tick num_cycles) dynamic_cast<GlobalSimLoopExitEvent *>(global_event); assert(global_exit_event != NULL); - // if we didn't hit limit_event, delete it. - if (global_exit_event != limit_event) { - assert(limit_event->scheduled()); - limit_event->deschedule(); - delete limit_event; - } - //! Delete the simulation quantum event. if (quantum_event != NULL) { quantum_event->deschedule(); |