[Tizen] Do not call gl functions during shutdown accepted/tizen/unified/20220803.095028 submit/tizen/20220802.070527
authorBowon Ryu <bowon.ryu@samsung.com>
Tue, 2 Aug 2022 05:15:21 +0000 (14:15 +0900)
committerBowon Ryu <bowon.ryu@samsung.com>
Tue, 2 Aug 2022 05:15:21 +0000 (14:15 +0900)
This reverts commit 6b172485332a7f55c5002151f1fc9b4279d9d248.

dali/internal/graphics/gles-impl/egl-graphics-controller.h

index fd944d3..4999c9d 100644 (file)
@@ -136,6 +136,16 @@ public:
     // Final flush
     Flush();
 
+    ClearTextureUpdateQueue();
+
+    // Remove all create queue and command queue.
+    // Note that all memory are already deallocated at Final flush.
+    mCreateTextureQueue              = {};
+    mCreateBufferQueue               = {};
+    mCreateFramebufferQueue          = {};
+    mTextureMipmapGenerationRequests = {};
+    mCommandQueue                    = {};
+
     if(mContext)
     {
       mContext->GlContextDestroyed();
@@ -464,6 +474,26 @@ public:
   }
 
   /**
+   * @brief Clears the texture update queue
+   */
+  void ClearTextureUpdateQueue()
+  {
+    // Remove remained CPU-allocated texture memory
+    while(!mTextureUpdateRequests.empty())
+    {
+      auto& request = mTextureUpdateRequests.front();
+      auto& source  = request.second;
+
+      if(source.sourceType == Graphics::TextureUpdateSourceInfo::Type::MEMORY)
+      {
+        // free staging memory
+        free(source.memorySource.memory);
+      }
+      mTextureUpdateRequests.pop();
+    }
+  }
+
+  /**
    * @brief Flushes all pending updates
    *
    * Function flushes all pending resource constructions,
@@ -471,26 +501,29 @@ public:
    */
   void Flush()
   {
-    if(!mCreateTextureQueue.empty() ||
-       !mCreateBufferQueue.empty() ||
-       !mCreateFramebufferQueue.empty() ||
-       !mTextureUpdateRequests.empty() ||
-       !mTextureMipmapGenerationRequests.empty())
+    if(DALI_LIKELY(!mIsShuttingDown))
     {
-      mGraphics->ActivateResourceContext();
-    }
+      if(!mCreateTextureQueue.empty() ||
+         !mCreateBufferQueue.empty() ||
+         !mCreateFramebufferQueue.empty() ||
+         !mTextureUpdateRequests.empty() ||
+         !mTextureMipmapGenerationRequests.empty())
+      {
+        mGraphics->ActivateResourceContext();
+      }
 
-    // Process creations
-    ProcessCreateQueues();
+      // Process creations
+      ProcessCreateQueues();
 
-    // Process updates
-    ProcessTextureUpdateQueue();
+      // Process updates
+      ProcessTextureUpdateQueue();
 
-    // Process texture mipmap generation requests
-    ProcessTextureMipmapGenerationQueue();
+      // Process texture mipmap generation requests
+      ProcessTextureMipmapGenerationQueue();
 
-    // Process main command queue
-    ProcessCommandQueues();
+      // Process main command queue
+      ProcessCommandQueues();
+    }
 
     // Reset texture cache in the contexts while destroying textures
     ResetTextureCache();