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)
{
WeakRealmNotifierBase::operator=(std::move(rgt));
invalidate();
m_runloop = rgt.m_runloop;
m_signal = rgt.m_signal;
rgt.m_runloop = nullptr;
@ -78,6 +80,11 @@ WeakRealmNotifier& WeakRealmNotifier::operator=(WeakRealmNotifier&& rgt)
}
WeakRealmNotifier::~WeakRealmNotifier()
{
invalidate();
}
void WeakRealmNotifier::invalidate()
{
if (m_signal) {
CFRunLoopSourceInvalidate(m_signal);

View File

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