[Tizen] Fix the crash when adding new scene during core event processing
[platform/core/uifw/dali-core.git] / dali / internal / common / core-impl.cpp
index c1e7fde..0e5c110 100644 (file)
@@ -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<ScenePtr> 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();
   }