[AT-SPI] Use a std::shared_ptr for Bridge 35/268335/2
authorArtur Świgoń <a.swigon@samsung.com>
Mon, 20 Dec 2021 13:44:06 +0000 (14:44 +0100)
committerArtur Świgoń <a.swigon@samsung.com>
Mon, 20 Dec 2021 13:48:45 +0000 (14:48 +0100)
BridgeImpl was constructed with an unpaired `new`, causing a memory
leak. Using a smart pointer guarantees that the memory will be freed at
the end of application lifetime.

Change-Id: Ib983d600cda082fa68e87c7d67130770acb78bef

dali/devel-api/adaptor-framework/accessibility-bridge.h
dali/internal/accessibility/bridge/bridge-impl.cpp
dali/internal/accessibility/bridge/dummy-atspi.cpp
dali/internal/accessibility/bridge/dummy-atspi.h

index 90f9fb5..1ef28d0 100644 (file)
@@ -353,7 +353,7 @@ struct DALI_ADAPTOR_API Bridge
    *
    * @return The current bridge object
    **/
-  static Bridge* GetCurrentBridge();
+  static std::shared_ptr<Bridge> GetCurrentBridge();
 
   /**
    * @brief Blocks auto-initialization of AT-SPI bridge
index 116e703..1a7ca8b 100644 (file)
@@ -665,7 +665,7 @@ bool INITIALIZED_BRIDGE = false;
  * @return The BridgeImpl instance
  * @note This method is to check environment variable first. If ATSPI is disable using env, it returns dummy bridge instance.
  */
-Bridge* CreateBridge()
+std::shared_ptr<Bridge> CreateBridge()
 {
   INITIALIZED_BRIDGE = true;
 
@@ -678,7 +678,7 @@ Bridge* CreateBridge()
       return Dali::Accessibility::DummyBridge::GetInstance();
     }
 
-    return new BridgeImpl;
+    return std::make_shared<BridgeImpl>();
   }
   catch(const std::exception&)
   {
@@ -691,9 +691,9 @@ Bridge* CreateBridge()
 
 // Dali::Accessibility::Bridge class implementation
 
-Bridge* Bridge::GetCurrentBridge()
+std::shared_ptr<Bridge> Bridge::GetCurrentBridge()
 {
-  static Bridge* bridge;
+  static std::shared_ptr<Bridge> bridge;
 
   if(bridge)
   {
@@ -741,7 +741,7 @@ void Bridge::EnableAutoInit()
 
   auto accessible = Accessibility::Accessible::Get(rootLayer, true);
 
-  auto* bridge = Bridge::GetCurrentBridge();
+  auto bridge = Bridge::GetCurrentBridge();
   bridge->AddTopLevelWindow(accessible);
   bridge->SetApplicationName(applicationName);
   bridge->Initialize();
index a518df9..4fd124b 100644 (file)
@@ -66,7 +66,7 @@ Accessibility::Accessible* Accessibility::Component::GetAccessibleAtPoint(Access
   return nullptr;
 }
 
-Accessibility::Bridge* Accessibility::Bridge::GetCurrentBridge()
+std::shared_ptr<Accessibility::Bridge> Accessibility::Bridge::GetCurrentBridge()
 {
   return Accessibility::DummyBridge::GetInstance();
 }
index 80079c1..81b287d 100644 (file)
@@ -25,11 +25,11 @@ namespace Dali::Accessibility
 {
 struct DummyBridge : Dali::Accessibility::Bridge
 {
-  static DummyBridge* GetInstance()
+  static std::shared_ptr<DummyBridge> GetInstance()
   {
-    static DummyBridge instance;
+    static auto instance = std::make_shared<DummyBridge>();
 
-    return &instance;
+    return instance;
   }
 
   const std::string& GetBusName() const override