From d8ce4531875427073cc47ae877af7f44bc078361 Mon Sep 17 00:00:00 2001 From: Hosang Kim Date: Wed, 15 Feb 2023 14:57:26 +0900 Subject: [PATCH] libaurum: add call_once when UiDevice is created for thread safety. UiDevice is singleton object so thread safety is necessary. Change-Id: I1233fd768ae2e2f57d53fd069167195c965e57e9 --- libaurum/inc/UiDevice.h | 1 + libaurum/src/UiDevice.cc | 13 ++++++------- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/libaurum/inc/UiDevice.h b/libaurum/inc/UiDevice.h index 025221f..b79fbe6 100644 --- a/libaurum/inc/UiDevice.h +++ b/libaurum/inc/UiDevice.h @@ -505,6 +505,7 @@ private: #ifdef MQTT_ENABLED static std::shared_ptr mSAWatcher; #endif + static std::once_flag mOnceFlag; }; } diff --git a/libaurum/src/UiDevice.cc b/libaurum/src/UiDevice.cc index 4865aa6..c266122 100644 --- a/libaurum/src/UiDevice.cc +++ b/libaurum/src/UiDevice.cc @@ -40,6 +40,7 @@ using namespace AurumInternal; #define WM_METHOD_NAME_INFO "GetVisibleWinInfo_v2" std::vector> UiDevice::mTizenWindows; +std::once_flag UiDevice::mOnceFlag; static GDBusConnection *system_conn; #ifdef MQTT_ENABLED @@ -68,19 +69,17 @@ UiDevice::~UiDevice() std::shared_ptr UiDevice::getInstance(IDevice *deviceImpl) { static std::shared_ptr device{nullptr}; - - if (deviceImpl) { - device.reset(new UiDevice(deviceImpl)); - } else { - if (device) return device; - else { + std::call_once(mOnceFlag, [deviceImpl] { + if (deviceImpl) { + device.reset(new UiDevice(deviceImpl)); + } else { #ifdef TIZEN device.reset(new UiDevice(new TizenDeviceImpl())); #else device.reset(new UiDevice(new MockDeviceImpl())); #endif } - } + }); return device; } -- 2.34.1