From d9db8580a58bc7959d755cd361c588327723f5d7 Mon Sep 17 00:00:00 2001 From: "Piotr Kosko/Tizen API (PLT) /SRPOL/Engineer/Samsung Electronics" Date: Mon, 14 Mar 2022 11:46:24 +0100 Subject: [PATCH] [Common] Changed method of deviced listener implementation To prevent crash in multithreaded model of wrt-services, there is a need to use device_changed_callback_ as a thread local variable. [Verification] Code compiles without errors. Change-Id: Ifba2cef597e6244ab9c071b10c870b942b500946 --- src/common/filesystem/filesystem_provider_deviced.cc | 4 ++-- src/common/filesystem/filesystem_provider_deviced.h | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/common/filesystem/filesystem_provider_deviced.cc b/src/common/filesystem/filesystem_provider_deviced.cc index 60bc1090..9bfb5ea7 100644 --- a/src/common/filesystem/filesystem_provider_deviced.cc +++ b/src/common/filesystem/filesystem_provider_deviced.cc @@ -54,6 +54,7 @@ bool isExternalStorageSupported() { return true; } +thread_local common::DeviceChangeStateFun device_changed_callback_; } // namespace namespace common { @@ -122,7 +123,6 @@ FilesystemProviderDeviced::~FilesystemProviderDeviced() { FilesystemProviderDeviced::FilesystemProviderDeviced() : dbus_(nullptr), proxy_(nullptr), - device_changed_callback_(nullptr), block_signal_subscribe_id_(0), virtual_roots_provider_(FilesystemProviderStorage::Create()), is_initialized_(false) { @@ -190,7 +190,7 @@ void FilesystemProviderDeviced::RegisterDeviceChangeState(DeviceChangeStateFun _ return; } - if (device_changed_callback_ == nullptr) { + if (0 == block_signal_subscribe_id_) { LoggerD("Registering dbus signal subscription"); block_signal_subscribe_id_ = g_dbus_connection_signal_subscribe( dbus_, nullptr, kBlockManagerIface, kDeviceChangedMethod, nullptr, nullptr, diff --git a/src/common/filesystem/filesystem_provider_deviced.h b/src/common/filesystem/filesystem_provider_deviced.h index 65746b80..4491c12b 100644 --- a/src/common/filesystem/filesystem_provider_deviced.h +++ b/src/common/filesystem/filesystem_provider_deviced.h @@ -60,7 +60,6 @@ class FilesystemProviderDeviced : public IFilesystemProvider { GDBusConnection* dbus_; GDBusProxy* proxy_; - DeviceChangeStateFun device_changed_callback_; guint block_signal_subscribe_id_; std::map previous_device_state_map_; FilesystemProviderRef virtual_roots_provider_; -- 2.34.1