Fix coverity issue (Do not throw std::bad_weak_ptr exception at destructor) 43/309043/1
authorEunki, Hong <eunkiki.hong@samsung.com>
Thu, 4 Apr 2024 06:49:14 +0000 (15:49 +0900)
committerEunki, Hong <eunkiki.hong@samsung.com>
Thu, 4 Apr 2024 06:49:14 +0000 (15:49 +0900)
Some internal code might throw that exception at ecore side.
Since we got some unknown crash issues from std::shared_ptr,
we'd better add some guard codes at destructor, what coverity system catched.

Change-Id: I357fd0314bb041b825b6965af3a44c3cb02bf161
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
dali/internal/accessibility/tizen-wayland/tts-player-impl-tizen.cpp
dali/internal/input/tizen-wayland/input-method-context-impl-ecore-wl.cpp
dali/internal/system/linux/file-descriptor-monitor-ecore.cpp
dali/internal/system/linux/timer-impl-ecore.cpp
dali/internal/window-system/tizen-wayland/ecore-wl/window-base-ecore-wl.cpp
dali/internal/window-system/tizen-wayland/ecore-wl2/window-base-ecore-wl2.cpp

index 20f167097aa81a244a21fc252d5dcf684ed73583..aeb04a95be249301ec39b2d99b1cba496ac6fad2 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -87,18 +87,25 @@ TtsPlayerTizen::~TtsPlayerTizen()
   // If it is playing, stop it
   Stop();
 
-  // Unset the callback funtion for TTS state change
-  int retVal = tts_unset_state_changed_cb(mTtsHandle);
-  if(retVal != TTS_ERROR_NONE)
+  try
   {
-    LogErrorCode(static_cast<tts_error_e>(retVal));
-  }
+    // Unset the callback funtion for TTS state change
+    int retVal = tts_unset_state_changed_cb(mTtsHandle);
+    if(retVal != TTS_ERROR_NONE)
+    {
+      LogErrorCode(static_cast<tts_error_e>(retVal));
+    }
 
-  // Destroy the TTS handle and disconnects the daemon
-  retVal = tts_destroy(mTtsHandle);
-  if(retVal != TTS_ERROR_NONE)
+    // Destroy the TTS handle and disconnects the daemon
+    retVal = tts_destroy(mTtsHandle);
+    if(retVal != TTS_ERROR_NONE)
+    {
+      LogErrorCode(static_cast<tts_error_e>(retVal));
+    }
+  }
+  catch(std::bad_weak_ptr const& ex)
   {
-    LogErrorCode(static_cast<tts_error_e>(retVal));
+    DALI_LOG_ERROR("TtsPlayerTizen::~TtsPlayerTizen() - std::bad_weak_ptr caught: %s\n", ex.what());
   }
 }
 
index 859593306258c06980b3352182427a96b6793012..bb5dcd754c72347742563dd91887ea5b2e88c46a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -347,7 +347,14 @@ InputMethodContextEcoreWl::InputMethodContextEcoreWl(Dali::Actor actor)
 InputMethodContextEcoreWl::~InputMethodContextEcoreWl()
 {
   Finalize();
-  ecore_imf_shutdown();
+  try
+  {
+    ecore_imf_shutdown();
+  }
+  catch(std::bad_weak_ptr const& ex)
+  {
+    DALI_LOG_ERROR("InputMethodContextEcoreWl::~InputMethodContextEcoreWl() - std::bad_weak_ptr caught: %s\n", ex.what());
+  }
 }
 
 void InputMethodContextEcoreWl::Initialize()
index 5d47dd81808e2023a2734c63fd6c377728d01755..5c89174411d5bdc4a70295584bca8bc72f7f5a0d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,6 +20,7 @@
 
 // EXTERNAL INCLUDES
 #include <dali/internal/system/linux/dali-ecore.h>
+#include <memory>
 
 // INTERNAL INCLUDES
 #include <dali/integration-api/debug.h>
@@ -129,7 +130,14 @@ FileDescriptorMonitorEcore::~FileDescriptorMonitorEcore()
 {
   if(mImpl->mHandler)
   {
-    ecore_main_fd_handler_del(mImpl->mHandler);
+    try
+    {
+      ecore_main_fd_handler_del(mImpl->mHandler);
+    }
+    catch(std::bad_weak_ptr const& ex)
+    {
+      DALI_LOG_ERROR("FileDescriptorMonitorEcore::~FileDescriptorMonitorEcore() - std::bad_weak_ptr caught: %s\n", ex.what());
+    }
   }
 
   delete mImpl;
index b0e110b08967d0454ed257a88e4c79234177911d..5220af7288e6e44db4dd88007b736ec9d4b0d37a 100644 (file)
@@ -77,7 +77,14 @@ TimerEcore::TimerEcore(uint32_t milliSec)
 
 TimerEcore::~TimerEcore()
 {
-  ResetTimerData();
+  try
+  {
+    ResetTimerData();
+  }
+  catch(std::bad_weak_ptr const& ex)
+  {
+    DALI_LOG_ERROR("TimerEcore::~TimerEcore() - std::bad_weak_ptr caught: %s\n", ex.what());
+  }
   delete mImpl;
 }
 
index 5150e927ff6d28950ee2d7f8760740b4b108f2c1..7c44c0692f3f9bb12fb61afe3f55a5134294245f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -605,7 +605,14 @@ WindowBaseEcoreWl::~WindowBaseEcoreWl()
 
   if(mOwnSurface)
   {
-    ecore_wl_window_free(mEcoreWindow);
+    try
+    {
+      ecore_wl_window_free(mEcoreWindow);
+    }
+    catch(std::bad_weak_ptr const& ex)
+    {
+      DALI_LOG_ERROR("WindowBaseEcoreWl::~WindowBaseEcoreWl() - window (%p) std::bad_weak_ptr caught: %s\n", mEcoreWindow, ex.what());
+    }
   }
 }
 
index ea136a389f754c05f31d7a57cfd716107c56184e..f63cd23988daf9a05dadceb0058d20cdbe3b32cf 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -956,7 +956,14 @@ WindowBaseEcoreWl2::~WindowBaseEcoreWl2()
 
   if(mOwnSurface)
   {
-    ecore_wl2_window_free(mEcoreWindow);
+    try
+    {
+      ecore_wl2_window_free(mEcoreWindow);
+    }
+    catch(std::bad_weak_ptr const& ex)
+    {
+      DALI_LOG_ERROR("WindowBaseEcoreWl2::~WindowBaseEcoreWl2() - window (%p) std::bad_weak_ptr caught: %s\n", mEcoreWindow, ex.what());
+    }
   }
 }