diff --git a/services/include/sensor_service.h b/services/include/sensor_service.h index 182d984b2669d7b662fde9b7570bd6471e821f29..9e83d3540ebdf21c9691f0a87a69e7198d99fab7 100644 --- a/services/include/sensor_service.h +++ b/services/include/sensor_service.h @@ -108,6 +108,7 @@ private: SensorManager &sensorManager_ = SensorManager::GetInstance(); std::mutex uidLock_; // death recipient of sensor client + std::mutex clientDeathObserverMutex_; sptr clientDeathObserver_ = nullptr; std::shared_ptr permStateChangeCb_ = nullptr; ErrCode SaveSubscriber(int32_t sensorId, int64_t samplingPeriodNs, int64_t maxReportDelayNs); diff --git a/services/src/sensor_service.cpp b/services/src/sensor_service.cpp index 5979dcf565411eff4ae5de3a28da51149f6144e5..9f90ffd88dd3eabb6d147a068c9c46538342121f 100644 --- a/services/src/sensor_service.cpp +++ b/services/src/sensor_service.cpp @@ -401,6 +401,7 @@ void SensorService::RegisterClientDeathRecipient(sptr sensorClien { CALL_LOG_ENTER; CHKPV(sensorClient); + std::lock_guard clientDeathObserverLock(clientDeathObserverMutex_); if (clientDeathObserver_ == nullptr) { clientDeathObserver_ = new (std::nothrow) DeathRecipientTemplate(*const_cast(this)); CHKPV(clientDeathObserver_); @@ -422,6 +423,7 @@ void SensorService::UnregisterClientDeathRecipient(sptr sensorCli SEN_HILOGD("Can't unregister client death recipient"); return; } + std::lock_guard clientDeathObserverLock(clientDeathObserverMutex_); sensorClient->RemoveDeathRecipient(clientDeathObserver_); clientInfo_.DestroyClientPid(sensorClient); }