diff --git a/services/native/file_access_service/include/file_access_service.h b/services/native/file_access_service/include/file_access_service.h index 5d4984c206533412724a48816ab4ff602cf222ab..8822896b02ab63782dd7f4d6d76a00c704bc9df4 100644 --- a/services/native/file_access_service/include/file_access_service.h +++ b/services/native/file_access_service/include/file_access_service.h @@ -259,6 +259,7 @@ private: int32_t OperateObsNode(Uri &uri, bool notifyForDescendants, uint32_t code, const std::shared_ptr &info); void CleanRelativeObserver(const sptr &observer); + std::vector GetUriList(uint32_t code); void SendListNotify(std::string uri, NotifyType notifyType, const std::vector &list); void RemoveRelations(std::string &uriStr, std::shared_ptr obsNode); int FindUri(const std::string &uriStr, std::shared_ptr &outObsNode); diff --git a/services/native/file_access_service/src/file_access_service.cpp b/services/native/file_access_service/src/file_access_service.cpp index 526a54f9364392682db8a7be87907c446f3b1a7d..0ce00c63b2a2dedc4a3b932f0f8f17bafcb4204d 100644 --- a/services/native/file_access_service/src/file_access_service.cpp +++ b/services/native/file_access_service/src/file_access_service.cpp @@ -245,15 +245,26 @@ void FileAccessService::CleanRelativeObserver(const sptr &o uint32_t code = obsManager_.getId([obsContext](const shared_ptr &afterContext) { return obsContext->EqualTo(afterContext); }); + std::vector uriLists = GetUriList(code); + for (int i = 0; i < uriLists.size(); ++i) { + UnregisterNotify(uriLists[i], observer); + } +} + +std::vector FileAccessService::GetUriList(uint32_t code) +{ + lock_guard lock(nodeMutex_); + std::vector uriList; for (auto pair : relationshipMap_) { auto codeList = pair.second->obsCodeList_; auto haveCodeIter = find_if(codeList.begin(), codeList.end(), [code](const uint32_t &listCode) { return code == listCode; }); if (haveCodeIter != codeList.end()) { Uri uri(pair.first); - UnregisterNotify(uri, observer); + uriList.push_back(uri); } } + return uriList; } static void convertUris(Uri uri, std::vector &uris)