sim: Fix resource leak in BaseGlobalEvent

Static analysis revealed that BaseGlobalEvent::barrier was never
deallocated. This changeset solves this leak by making the barrier
allocation a part of the BaseGlobalEvent instead of storing a pointer
to a separate heap-allocated barrier.
This commit is contained in:
Andreas Sandberg 2014-09-09 04:36:32 -04:00
parent da4539dc74
commit 11494c4345
2 changed files with 4 additions and 4 deletions

View file

@ -34,9 +34,9 @@
std::mutex BaseGlobalEvent::globalQMutex; std::mutex BaseGlobalEvent::globalQMutex;
BaseGlobalEvent::BaseGlobalEvent(Priority p, Flags f) BaseGlobalEvent::BaseGlobalEvent(Priority p, Flags f)
: barrier(numMainEventQueues),
barrierEvent(numMainEventQueues, NULL)
{ {
barrierEvent.resize(numMainEventQueues);
barrier = new Barrier(numMainEventQueues);
} }

View file

@ -100,7 +100,7 @@ class BaseGlobalEvent : public EventBase
// while waiting on the barrier to prevent deadlocks if // while waiting on the barrier to prevent deadlocks if
// another thread wants to lock the event queue. // another thread wants to lock the event queue.
EventQueue::ScopedRelease release(curEventQueue()); EventQueue::ScopedRelease release(curEventQueue());
return _globalEvent->barrier->wait(); return _globalEvent->barrier.wait();
} }
public: public:
@ -109,7 +109,7 @@ class BaseGlobalEvent : public EventBase
//! The barrier that all threads wait on before performing the //! The barrier that all threads wait on before performing the
//! global event. //! global event.
Barrier *barrier; Barrier barrier;
//! The individual local event instances (one per thread/event queue). //! The individual local event instances (one per thread/event queue).
std::vector<BarrierEvent *> barrierEvent; std::vector<BarrierEvent *> barrierEvent;