Avoid leaking the runloop and source if WeakRealmNotifier is move-assigned.

This commit is contained in:
Mark Rowe 2016-05-31 21:54:40 -07:00
parent 91c87e4de6
commit 702b8a31fb
2 changed files with 9 additions and 0 deletions

View File

@ -69,6 +69,8 @@ WeakRealmNotifier::WeakRealmNotifier(WeakRealmNotifier&& rgt)
WeakRealmNotifier& WeakRealmNotifier::operator=(WeakRealmNotifier&& rgt) WeakRealmNotifier& WeakRealmNotifier::operator=(WeakRealmNotifier&& rgt)
{ {
WeakRealmNotifierBase::operator=(std::move(rgt)); WeakRealmNotifierBase::operator=(std::move(rgt));
invalidate();
m_runloop = rgt.m_runloop; m_runloop = rgt.m_runloop;
m_signal = rgt.m_signal; m_signal = rgt.m_signal;
rgt.m_runloop = nullptr; rgt.m_runloop = nullptr;
@ -78,6 +80,11 @@ WeakRealmNotifier& WeakRealmNotifier::operator=(WeakRealmNotifier&& rgt)
} }
WeakRealmNotifier::~WeakRealmNotifier() WeakRealmNotifier::~WeakRealmNotifier()
{
invalidate();
}
void WeakRealmNotifier::invalidate()
{ {
if (m_signal) { if (m_signal) {
CFRunLoopSourceInvalidate(m_signal); CFRunLoopSourceInvalidate(m_signal);

View File

@ -40,6 +40,8 @@ public:
void notify(); void notify();
private: private:
void invalidate();
CFRunLoopRef m_runloop; CFRunLoopRef m_runloop;
CFRunLoopSourceRef m_signal; CFRunLoopSourceRef m_signal;
}; };