diff --git a/adapter/uhdf2/hdi/src/object_collector.cpp b/adapter/uhdf2/hdi/src/object_collector.cpp index ac6bee61b048a72425bbeda2e6e30d77a1fb3490..b7b146a2a4a32a54e1c557629145331326812d4a 100644 --- a/adapter/uhdf2/hdi/src/object_collector.cpp +++ b/adapter/uhdf2/hdi/src/object_collector.cpp @@ -15,7 +15,7 @@ #include "object_collector.h" #include - +#include #include "hdf_base.h" #include "hdf_log.h" #include "osal_time.h" @@ -74,12 +74,13 @@ OHOS::sptr ObjectCollector::GetOrNewObject( } RETRY: - std::lock_guard lock(mutex_); + std::unique_lock lock(mutex_); auto it = interfaceObjectCollector_.find(interface.GetRefPtr()); if (it != interfaceObjectCollector_.end()) { if (it->second->GetSptrRefCount() == 0) { // may object is releasing, yield to sync - OsalMSleep(1); + lock.unlock(); + std::this_thread::yield(); goto RETRY; } return it->second.GetRefPtr();