From: Hosang Kim Date: Wed, 15 Feb 2023 05:57:26 +0000 (+0900) Subject: libaurum: add call_once when UiDevice is created for thread safety. X-Git-Tag: accepted/tizen/unified/20230303.162759~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d8ce4531875427073cc47ae877af7f44bc078361;p=platform%2Fcore%2Fuifw%2Faurum.git libaurum: add call_once when UiDevice is created for thread safety. UiDevice is singleton object so thread safety is necessary. Change-Id: I1233fd768ae2e2f57d53fd069167195c965e57e9 --- 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; }