diff --git a/interfaces/ipc/include/distributed_input_source_stub.h b/interfaces/ipc/include/distributed_input_source_stub.h index 2690ce8..8f40adb 100644 --- a/interfaces/ipc/include/distributed_input_source_stub.h +++ b/interfaces/ipc/include/distributed_input_source_stub.h @@ -18,7 +18,9 @@ #include "i_distributed_source_input.h" +#include #include +#include #include "iremote_stub.h" @@ -57,6 +59,9 @@ private: int32_t HandleRegisterSimulationEventListener(MessageParcel &data, MessageParcel &reply); int32_t HandleUnregisterSimulationEventListener(MessageParcel &data, MessageParcel &reply); DISALLOW_COPY_AND_MOVE(DistributedInputSourceStub); +private: + std::atomic sourceManagerInitFlag_ {false}; + std::mutex operatorMutex_; }; } // 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 6475bca..5b7a959 100644 --- a/interfaces/ipc/src/distributed_input_source_stub.cpp +++ b/interfaces/ipc/src/distributed_input_source_stub.cpp @@ -31,21 +31,33 @@ DistributedInputSourceStub::~DistributedInputSourceStub() int32_t DistributedInputSourceStub::HandleInitDistributedHardware(MessageParcel &reply) { + std::unique_lock lock(operatorMutex_); + if (sourceManagerInitFlag_.load()) { + DHLOGE("DistributedInputSourceStub already init."); + return DH_SUCCESS; + } int32_t ret = Init(); if (!reply.WriteInt32(ret)) { DHLOGE("DistributedInputSourceStub Init write ret failed"); return ERR_DH_INPUT_IPC_WRITE_TOKEN_VALID_FAIL; } + sourceManagerInitFlag_.store(true); return DH_SUCCESS; } int32_t DistributedInputSourceStub::HandleReleaseDistributedHardware(MessageParcel &reply) { + std::unique_lock lock(operatorMutex_); + if (!sourceManagerInitFlag_.load()) { + DHLOGE("DistributedInputSourceStub already Release."); + return DH_SUCCESS; + } int32_t ret = Release(); if (!reply.WriteInt32(ret)) { DHLOGE("DistributedInputSourceStub release write ret failed"); return ERR_DH_INPUT_IPC_WRITE_TOKEN_VALID_FAIL; } + sourceManagerInitFlag_.store(false); return DH_SUCCESS; }