From 99a5cb0e66ff7af8f53642edffc07aeaa25e0c5a Mon Sep 17 00:00:00 2001 From: WDY Date: Thu, 21 Aug 2025 16:09:38 +0800 Subject: [PATCH] CancelSession Signed-off-by: WDY --- .../src/cloud_asset_read_session.cpp | 5 +++++ .../cloud_file_kit_inner/cloud_asset_read_session.h | 1 + .../src/fuse_manager/fuse_manager.cpp | 12 ++++++++---- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/frameworks/native/cloud_file_kit_inner/src/cloud_asset_read_session.cpp b/frameworks/native/cloud_file_kit_inner/src/cloud_asset_read_session.cpp index 748991327..e87e6b818 100644 --- a/frameworks/native/cloud_file_kit_inner/src/cloud_asset_read_session.cpp +++ b/frameworks/native/cloud_file_kit_inner/src/cloud_asset_read_session.cpp @@ -42,6 +42,11 @@ int64_t CloudAssetReadSession::PRead(int64_t offset, return E_OK; } +void CloudAssetReadSession::CancelSession() +{ + return; +} + bool CloudAssetReadSession::Close(bool needRemain) { return true; diff --git a/interfaces/inner_api/native/cloud_file_kit_inner/cloud_asset_read_session.h b/interfaces/inner_api/native/cloud_file_kit_inner/cloud_asset_read_session.h index 384e574f1..1650f9002 100644 --- a/interfaces/inner_api/native/cloud_file_kit_inner/cloud_asset_read_session.h +++ b/interfaces/inner_api/native/cloud_file_kit_inner/cloud_asset_read_session.h @@ -35,6 +35,7 @@ public: char *buffer, CloudError &error, const std::string appId = ""); + virtual void CancelSession(); virtual bool Close(bool needRemain = false); virtual void SentPrepareTraceId(std::string prepareTraceId); virtual bool Catch(CloudError &error, uint32_t catchTimeOutPara); diff --git a/services/cloudfiledaemon/src/fuse_manager/fuse_manager.cpp b/services/cloudfiledaemon/src/fuse_manager/fuse_manager.cpp index 4f9785444..589743e46 100644 --- a/services/cloudfiledaemon/src/fuse_manager/fuse_manager.cpp +++ b/services/cloudfiledaemon/src/fuse_manager/fuse_manager.cpp @@ -900,6 +900,7 @@ static int DoCloudOpen(shared_ptr cInode, struct fuse_file_info *fi, " prepareTraceId: " + prepareTraceId; CLOUD_FILE_FAULT_REPORT(CloudFileFaultInfo{PHOTOS_BUNDLE_NAME, FaultOperation::OPEN, FaultType::OPEN_CLOUD_FILE_TIMEOUT, ENETUNREACH, msg}); + cInode->readSession->CancelSession(); return -ENETUNREACH; } return HandleOpenResult(*error, data, cInode, fi); @@ -1083,16 +1084,19 @@ static void CloudRelease(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info * return; } std::unique_lock wSesLock(cInode->sessionLock, std::defer_lock); - LOGI("%{public}d release %{public}s, sessionRefCount: %{public}d", pid, - GetAnonyString(cInode->path).c_str(), cInode->sessionRefCount.load()); + LOGI("%{public}d release %{public}s, sessionRefCount: %{public}d, fileType: %{public}d", pid, + GetAnonyString(cInode->path).c_str(), cInode->sessionRefCount.load(), cInode->mBase->fileType); wSesLock.lock(); cInode->sessionRefCount--; auto cloudFdInfo = FindKeyInCloudFdCache(data, fi->fh); DeleteFdsan(cloudFdInfo); EraseCloudFdCache(data, fi->fh); if (cInode->sessionRefCount == 0) { - if (cInode->mBase->fileType == FILE_TYPE_CONTENT && (!cInode->readSession->Close(false))) { - LOGE("Failed to close readSession"); + if (cInode->mBase->fileType == FILE_TYPE_CONTENT) { + cInode->readSession->CancelSession(); + if (!cInode->readSession->Close(false)) { + LOGE("Failed to close readSession"); + } } cInode->readSession = nullptr; cInode->readCacheMap.clear(); -- Gitee