From 132f07f8bef9ee51582c71f4d3fb079b5ebaddb2 Mon Sep 17 00:00:00 2001 From: vng Date: Thu, 12 Jul 2012 15:14:48 -0700 Subject: [PATCH] [iOS] Fix some potential bug in WindowHandle <-> IOSVideoTimer routine. --- platform/ios_video_timer.mm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/platform/ios_video_timer.mm b/platform/ios_video_timer.mm index 0f2eb42db9..061da11da4 100644 --- a/platform/ios_video_timer.mm +++ b/platform/ios_video_timer.mm @@ -48,10 +48,12 @@ public: { if (m_displayLink) { + // Set EStopped flag first. It seems like 'CADisplayLink::invalidate' can invoke pending 'perform'. + // So we should check EStopped flag in 'perform' to skip pending call. + m_state = EStopped; [m_displayLink invalidate]; [m_objCppWrapper release]; m_displayLink = 0; - m_state = EStopped; } } @@ -69,7 +71,10 @@ public: void perform() { - m_frameFn(); + // In case when we stopped and have pending perform at the same time. + // It's not allowed to call m_frameFn after stopping (see WindowHandle::~WindowHandle). + if (m_state != EStopped) + m_frameFn(); } };