diff --git a/interfaces/ipc/include/distributed_input_source_stub.h b/interfaces/ipc/include/distributed_input_source_stub.h index 75484f0..5df3b2c 100644 --- a/interfaces/ipc/include/distributed_input_source_stub.h +++ b/interfaces/ipc/include/distributed_input_source_stub.h @@ -18,8 +18,9 @@ #include "i_distributed_source_input.h" -#include #include +#include +#include #include "iremote_stub.h" @@ -59,7 +60,8 @@ private: int32_t HandleUnregisterSimulationEventListener(MessageParcel &data, MessageParcel &reply); DISALLOW_COPY_AND_MOVE(DistributedInputSourceStub); private: - std::atomic sourceInitFlag_ {false}; + std::atomic sourceManagerInitFlag_ {false}; + std::mutex sourceManagerReleaseMutex_; }; } // namespace DistributedInput } // namespace DistributedHardware diff --git a/interfaces/ipc/src/distributed_input_source_stub.cpp b/interfaces/ipc/src/distributed_input_source_stub.cpp index 7a830ef..16d1984 100644 --- a/interfaces/ipc/src/distributed_input_source_stub.cpp +++ b/interfaces/ipc/src/distributed_input_source_stub.cpp @@ -31,7 +31,7 @@ DistributedInputSourceStub::~DistributedInputSourceStub() int32_t DistributedInputSourceStub::HandleInitDistributedHardware(MessageParcel &reply) { - if (sourceInitFlag_.load()) { + if (sourceManagerInitFlag_.load()) { DHLOGE("DistributedInputSourceStub already init."); return DH_SUCCESS; } @@ -40,12 +40,13 @@ int32_t DistributedInputSourceStub::HandleInitDistributedHardware(MessageParcel DHLOGE("DistributedInputSourceStub Init write ret failed"); return ERR_DH_INPUT_IPC_WRITE_TOKEN_VALID_FAIL; } - sourceInitFlag_.store(true); + sourceManagerInitFlag_.store(true); return DH_SUCCESS; } int32_t DistributedInputSourceStub::HandleReleaseDistributedHardware(MessageParcel &reply) { + std::unique_lock lock(sourceManagerReleaseMutex_); int32_t ret = Release(); if (!reply.WriteInt32(ret)) { DHLOGE("DistributedInputSourceStub release write ret failed");