Fix memory leaks

* Fix recursive reference memory leak in UIWidget
* Make Event/ScheduledEvent memory-leak safe
* Fix exit crashs by freeing graphics resources before destroying GL context
* Add many asserts to avoid any leak regression
This commit is contained in:
Eduardo Bart
2012-06-18 05:13:52 -03:00
parent f650b0e5bb
commit 1c7bbaea89
42 changed files with 326 additions and 81 deletions

View File

@@ -32,8 +32,12 @@ void EventDispatcher::flush()
while(!m_eventList.empty())
poll();
while(!m_scheduledEventList.empty())
while(!m_scheduledEventList.empty()) {
ScheduledEventPtr scheduledEvent = m_scheduledEventList.top();
scheduledEvent->cancel();
m_scheduledEventList.pop();
}
m_disabled = true;
}
void EventDispatcher::poll()
@@ -77,6 +81,9 @@ void EventDispatcher::poll()
ScheduledEventPtr EventDispatcher::scheduleEvent(const std::function<void()>& callback, int delay)
{
if(m_disabled)
return ScheduledEventPtr(new ScheduledEvent(nullptr, delay, 1));
assert(delay >= 0);
ScheduledEventPtr scheduledEvent(new ScheduledEvent(callback, delay, 1));
m_scheduledEventList.push(scheduledEvent);
@@ -85,6 +92,9 @@ ScheduledEventPtr EventDispatcher::scheduleEvent(const std::function<void()>& ca
ScheduledEventPtr EventDispatcher::cycleEvent(const std::function<void()>& callback, int delay)
{
if(m_disabled)
return ScheduledEventPtr(new ScheduledEvent(nullptr, delay, 0));
assert(delay > 0);
ScheduledEventPtr scheduledEvent(new ScheduledEvent(callback, delay, 0));
m_scheduledEventList.push(scheduledEvent);
@@ -93,6 +103,9 @@ ScheduledEventPtr EventDispatcher::cycleEvent(const std::function<void()>& callb
EventPtr EventDispatcher::addEvent(const std::function<void()>& callback, bool pushFront)
{
if(m_disabled)
return EventPtr(new Event(nullptr));
EventPtr event(new Event(callback));
// front pushing is a way to execute an event before others
if(pushFront) {