From 625f72a2c007a02f768047a888e13d9fc501976f Mon Sep 17 00:00:00 2001 From: linjun9528 Date: Tue, 12 Jul 2022 10:44:10 +0800 Subject: [PATCH 1/5] alter connectAbility from async to sync Signed-off-by: linjun9528 --- .../file_access/include/file_access_ext_connection.h | 12 ++++++------ .../file_access/src/file_access_ext_connection.cpp | 11 ++++++++++- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/frameworks/innerkits/file_access/include/file_access_ext_connection.h b/frameworks/innerkits/file_access/include/file_access_ext_connection.h index e47b0cff..ad22f080 100644 --- a/frameworks/innerkits/file_access/include/file_access_ext_connection.h +++ b/frameworks/innerkits/file_access/include/file_access_ext_connection.h @@ -31,21 +31,21 @@ public: virtual ~FileAccessExtConnection() = default; static sptr GetInstance(); - void OnAbilityConnectDone( const AppExecFwk::ElementName &element, const sptr &remoteObject, int resultCode) override; - void OnAbilityDisconnectDone(const AppExecFwk::ElementName &element, int resultCode) override; - void ConnectFileExtAbility(const AAFwk::Want &want, const sptr &token); - void DisconnectFileExtAbility(); - bool IsExtAbilityConnected(); - sptr GetFileExtProxy(); private: + struct ConnectCondition { + std::condition_variable condition; + std::mutex mutex; + }; + ConnectCondition condition_; + static sptr instance_; static std::mutex mutex_; std::atomic isConnected_ = {false}; diff --git a/frameworks/innerkits/file_access/src/file_access_ext_connection.cpp b/frameworks/innerkits/file_access/src/file_access_ext_connection.cpp index e7e96042..2570451e 100644 --- a/frameworks/innerkits/file_access/src/file_access_ext_connection.cpp +++ b/frameworks/innerkits/file_access/src/file_access_ext_connection.cpp @@ -21,6 +21,9 @@ namespace OHOS { namespace FileAccessFwk { +namespace { + constexpr int WAIT_TIME = 1; +} sptr FileAccessExtConnection::instance_ = nullptr; std::mutex FileAccessExtConnection::mutex_; @@ -43,6 +46,8 @@ void FileAccessExtConnection::OnAbilityConnectDone( return; } fileExtProxy_ = iface_cast(remoteObject); + std::unique_lock lock(condition_.mutex); + condition_.condition.notify_all(); if (fileExtProxy_ == nullptr) { HILOG_ERROR("%{public}s failed, fileExtProxy_ is nullptr", __func__); return; @@ -58,8 +63,12 @@ void FileAccessExtConnection::OnAbilityDisconnectDone(const AppExecFwk::ElementN void FileAccessExtConnection::ConnectFileExtAbility(const AAFwk::Want &want, const sptr &token) { + std::unique_lock lock(condition_.mutex); ErrCode ret = AAFwk::AbilityManagerClient::GetInstance()->ConnectAbility(want, this, token); - HILOG_INFO("%{public}s called end, ret=%{public}d", __func__, ret); + if (condition_.condition.wait_for(lock, std::chrono::seconds(WAIT_TIME), + [this] { return fileExtProxy_ != nullptr; })) { + } + HILOG_INFO("ConnectAbility ret = %{public}d", ret); } void FileAccessExtConnection::DisconnectFileExtAbility() -- Gitee From c36afbcd818e08d092e1c6cac0812374293f3275 Mon Sep 17 00:00:00 2001 From: linjun9528 Date: Tue, 12 Jul 2022 18:03:18 +0800 Subject: [PATCH 2/5] fix codex Signed-off-by: linjun9528 --- .../include/file_access_ext_connection.h | 5 +++-- .../src/file_access_ext_connection.cpp | 16 ++++++++++------ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/frameworks/innerkits/file_access/include/file_access_ext_connection.h b/frameworks/innerkits/file_access/include/file_access_ext_connection.h index ad22f080..e0565b51 100644 --- a/frameworks/innerkits/file_access/include/file_access_ext_connection.h +++ b/frameworks/innerkits/file_access/include/file_access_ext_connection.h @@ -40,11 +40,12 @@ public: sptr GetFileExtProxy(); private: - struct ConnectCondition { + struct ThreadLockInfo { std::condition_variable condition; std::mutex mutex; + bool isReady = false; }; - ConnectCondition condition_; + ThreadLockInfo connectLockInfo_; static sptr instance_; static std::mutex mutex_; diff --git a/frameworks/innerkits/file_access/src/file_access_ext_connection.cpp b/frameworks/innerkits/file_access/src/file_access_ext_connection.cpp index 2570451e..5c8c955a 100644 --- a/frameworks/innerkits/file_access/src/file_access_ext_connection.cpp +++ b/frameworks/innerkits/file_access/src/file_access_ext_connection.cpp @@ -46,8 +46,11 @@ void FileAccessExtConnection::OnAbilityConnectDone( return; } fileExtProxy_ = iface_cast(remoteObject); - std::unique_lock lock(condition_.mutex); - condition_.condition.notify_all(); + { + std::lock_guard lock(connectLockInfo_.mutex); + connectLockInfo_.isReady = true; + connectLockInfo_.condition.notify_all(); + } if (fileExtProxy_ == nullptr) { HILOG_ERROR("%{public}s failed, fileExtProxy_ is nullptr", __func__); return; @@ -63,12 +66,13 @@ void FileAccessExtConnection::OnAbilityDisconnectDone(const AppExecFwk::ElementN void FileAccessExtConnection::ConnectFileExtAbility(const AAFwk::Want &want, const sptr &token) { - std::unique_lock lock(condition_.mutex); ErrCode ret = AAFwk::AbilityManagerClient::GetInstance()->ConnectAbility(want, this, token); - if (condition_.condition.wait_for(lock, std::chrono::seconds(WAIT_TIME), - [this] { return fileExtProxy_ != nullptr; })) { + std::unique_lock lock(connectLockInfo_.mutex); + if (!connectLockInfo_.condition.wait_for(lock, std::chrono::seconds(WAIT_TIME), + [this] { return fileExtProxy_ != nullptr && connectLockInfo_.isReady; })) { + HILOG_INFO("Wait connect timeout."); } - HILOG_INFO("ConnectAbility ret = %{public}d", ret); + HILOG_INFO("ConnectAbility ret=%{public}d", ret); } void FileAccessExtConnection::DisconnectFileExtAbility() -- Gitee From d02c98040e562e601f8dc82ea015de3747cad7e1 Mon Sep 17 00:00:00 2001 From: linjun9528 Date: Tue, 12 Jul 2022 18:59:40 +0800 Subject: [PATCH 3/5] fix codex Signed-off-by: linjun9528 --- .../innerkits/file_access/src/file_access_ext_connection.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/innerkits/file_access/src/file_access_ext_connection.cpp b/frameworks/innerkits/file_access/src/file_access_ext_connection.cpp index 5c8c955a..2dd05aff 100644 --- a/frameworks/innerkits/file_access/src/file_access_ext_connection.cpp +++ b/frameworks/innerkits/file_access/src/file_access_ext_connection.cpp @@ -69,7 +69,7 @@ void FileAccessExtConnection::ConnectFileExtAbility(const AAFwk::Want &want, con ErrCode ret = AAFwk::AbilityManagerClient::GetInstance()->ConnectAbility(want, this, token); std::unique_lock lock(connectLockInfo_.mutex); if (!connectLockInfo_.condition.wait_for(lock, std::chrono::seconds(WAIT_TIME), - [this] { return fileExtProxy_ != nullptr && connectLockInfo_.isReady; })) { + [this] { return fileExtProxy_ != nullptr && connectLockInfo_.isReady; })) { HILOG_INFO("Wait connect timeout."); } HILOG_INFO("ConnectAbility ret=%{public}d", ret); -- Gitee From 611da28a55b4efdf8270175c0eb7672784707bc3 Mon Sep 17 00:00:00 2001 From: linjun9528 Date: Tue, 12 Jul 2022 20:20:30 +0800 Subject: [PATCH 4/5] fix codex Signed-off-by: linjun9528 --- .../src/file_access_ext_connection.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/frameworks/innerkits/file_access/src/file_access_ext_connection.cpp b/frameworks/innerkits/file_access/src/file_access_ext_connection.cpp index 2dd05aff..561d7dd8 100644 --- a/frameworks/innerkits/file_access/src/file_access_ext_connection.cpp +++ b/frameworks/innerkits/file_access/src/file_access_ext_connection.cpp @@ -42,20 +42,18 @@ void FileAccessExtConnection::OnAbilityConnectDone( const AppExecFwk::ElementName &element, const sptr &remoteObject, int resultCode) { if (remoteObject == nullptr) { - HILOG_ERROR("%{public}s failed, remote is nullptr", __func__); + HILOG_ERROR("remote is nullptr"); return; } fileExtProxy_ = iface_cast(remoteObject); - { - std::lock_guard lock(connectLockInfo_.mutex); - connectLockInfo_.isReady = true; - connectLockInfo_.condition.notify_all(); - } if (fileExtProxy_ == nullptr) { - HILOG_ERROR("%{public}s failed, fileExtProxy_ is nullptr", __func__); + HILOG_ERROR("fileExtProxy_ is nullptr"); return; } isConnected_.store(true); + std::lock_guard lock(connectLockInfo_.mutex); + connectLockInfo_.isReady = true; + connectLockInfo_.condition.notify_all(); } void FileAccessExtConnection::OnAbilityDisconnectDone(const AppExecFwk::ElementName &element, int resultCode) @@ -67,12 +65,15 @@ void FileAccessExtConnection::OnAbilityDisconnectDone(const AppExecFwk::ElementN void FileAccessExtConnection::ConnectFileExtAbility(const AAFwk::Want &want, const sptr &token) { ErrCode ret = AAFwk::AbilityManagerClient::GetInstance()->ConnectAbility(want, this, token); + if (ret != ERR_OK) { + HILOG_INFO("ConnectAbility ret=%{public}d", ret); + return; + } std::unique_lock lock(connectLockInfo_.mutex); if (!connectLockInfo_.condition.wait_for(lock, std::chrono::seconds(WAIT_TIME), [this] { return fileExtProxy_ != nullptr && connectLockInfo_.isReady; })) { HILOG_INFO("Wait connect timeout."); } - HILOG_INFO("ConnectAbility ret=%{public}d", ret); } void FileAccessExtConnection::DisconnectFileExtAbility() -- Gitee From e47280609404f6319435f4d270949851610092d3 Mon Sep 17 00:00:00 2001 From: linjun9528 Date: Thu, 14 Jul 2022 12:47:48 +0800 Subject: [PATCH 5/5] add comment Signed-off-by: linjun9528 --- .../innerkits/file_access/src/file_access_ext_connection.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/innerkits/file_access/src/file_access_ext_connection.cpp b/frameworks/innerkits/file_access/src/file_access_ext_connection.cpp index 561d7dd8..a07a3fb7 100644 --- a/frameworks/innerkits/file_access/src/file_access_ext_connection.cpp +++ b/frameworks/innerkits/file_access/src/file_access_ext_connection.cpp @@ -22,7 +22,7 @@ namespace OHOS { namespace FileAccessFwk { namespace { - constexpr int WAIT_TIME = 1; + constexpr int WAIT_TIME = 1; // second } sptr FileAccessExtConnection::instance_ = nullptr; std::mutex FileAccessExtConnection::mutex_; -- Gitee