diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/sim/eventq.hh | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/src/sim/eventq.hh b/src/sim/eventq.hh index 6d68b4e3a..0a0405fef 100644 --- a/src/sim/eventq.hh +++ b/src/sim/eventq.hh @@ -542,28 +542,36 @@ class EventQueue * example, be useful when performing IO across thread event * queues when timing is not crucial (e.g., during fast * forwarding). + * + * ScopedMigration does nothing if both eqs are the same */ class ScopedMigration { public: - ScopedMigration(EventQueue *_new_eq) - : new_eq(*_new_eq), old_eq(*curEventQueue()) + ScopedMigration(EventQueue *_new_eq, bool _doMigrate = true) + :new_eq(*_new_eq), old_eq(*curEventQueue()), + doMigrate((&new_eq != &old_eq)&&_doMigrate) { - old_eq.unlock(); - new_eq.lock(); - curEventQueue(&new_eq); + if (doMigrate){ + old_eq.unlock(); + new_eq.lock(); + curEventQueue(&new_eq); + } } ~ScopedMigration() { - new_eq.unlock(); - old_eq.lock(); - curEventQueue(&old_eq); + if (doMigrate){ + new_eq.unlock(); + old_eq.lock(); + curEventQueue(&old_eq); + } } private: EventQueue &new_eq; EventQueue &old_eq; + bool doMigrate; }; /** |