From: Richard Huang Date: Fri, 21 Jun 2019 13:14:16 +0000 (+0100) Subject: [Tizen] Fix the crash when adding new scene during core event processing X-Git-Tag: accepted/tizen/unified/20190626.040901^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b224e05852b5c5508e6ff8c2a46978846340b5e6;p=platform%2Fcore%2Fuifw%2Fdali-core.git [Tizen] Fix the crash when adding new scene during core event processing Change-Id: I6ed13af6305a3615f0c874a2112cb132d894d56d --- diff --git a/dali/internal/common/core-impl.cpp b/dali/internal/common/core-impl.cpp index c1e7fde..0e5c110 100644 --- a/dali/internal/common/core-impl.cpp +++ b/dali/internal/common/core-impl.cpp @@ -268,8 +268,12 @@ void Core::ProcessEvents() // Signal that any messages received will be flushed soon mUpdateManager->EventProcessingStarted(); + // Scene could be added or removed while processing the events + // Copy the Scene container locally to avoid possibly invalid iterator + std::vector scenes = mScenes; + // process events in all scenes - for( auto iter = mScenes.begin(); iter != mScenes.end(); ++iter ) + for( auto iter = scenes.begin(); iter != scenes.end(); ++iter ) { (*iter)->ProcessEvents(); } @@ -277,7 +281,7 @@ void Core::ProcessEvents() mNotificationManager->ProcessMessages(); // Emit signal here to inform listeners that event processing has finished. - for( auto iter = mScenes.begin(); iter != mScenes.end(); ++iter ) + for( auto iter = scenes.begin(); iter != scenes.end(); ++iter ) { (*iter)->EmitEventProcessingFinishedSignal(); } @@ -289,7 +293,7 @@ void Core::ProcessEvents() mRelayoutController->Relayout(); // Rebuild depth tree after event processing has finished - for( auto iter = mScenes.begin(); iter != mScenes.end(); ++iter ) + for( auto iter = scenes.begin(); iter != scenes.end(); ++iter ) { (*iter)->RebuildDepthTree(); }