diff --git a/interfaces/ipc/include/distributed_input_source_stub.h b/interfaces/ipc/include/distributed_input_source_stub.h index 2690ce84152aadef91ec3298600ea26a9b0560eb..8f40adb2f57f2d5ca5d8124a6bdc32442e412bbb 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 6475bca19e88865ab3731e8b0f76ca9cc0beee0e..5b7a9591d4088255eeb4a65364a55037904be624 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; }