From 053fd46bd8ff57a9f8c2c15eaa97c536ca8662d4 Mon Sep 17 00:00:00 2001 From: liqiao49 Date: Mon, 17 Jul 2023 12:04:06 +0800 Subject: [PATCH] fix dinput crash Signed-off-by: liqiao49 --- interfaces/ipc/include/distributed_input_source_stub.h | 2 +- interfaces/ipc/src/distributed_input_source_stub.cpp | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/interfaces/ipc/include/distributed_input_source_stub.h b/interfaces/ipc/include/distributed_input_source_stub.h index 5df3b2c..8f40adb 100644 --- a/interfaces/ipc/include/distributed_input_source_stub.h +++ b/interfaces/ipc/include/distributed_input_source_stub.h @@ -61,7 +61,7 @@ private: DISALLOW_COPY_AND_MOVE(DistributedInputSourceStub); private: std::atomic sourceManagerInitFlag_ {false}; - std::mutex sourceManagerReleaseMutex_; + 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 16d1984..5b7a959 100644 --- a/interfaces/ipc/src/distributed_input_source_stub.cpp +++ b/interfaces/ipc/src/distributed_input_source_stub.cpp @@ -31,6 +31,7 @@ DistributedInputSourceStub::~DistributedInputSourceStub() int32_t DistributedInputSourceStub::HandleInitDistributedHardware(MessageParcel &reply) { + std::unique_lock lock(operatorMutex_); if (sourceManagerInitFlag_.load()) { DHLOGE("DistributedInputSourceStub already init."); return DH_SUCCESS; @@ -46,12 +47,17 @@ int32_t DistributedInputSourceStub::HandleInitDistributedHardware(MessageParcel int32_t DistributedInputSourceStub::HandleReleaseDistributedHardware(MessageParcel &reply) { - std::unique_lock lock(sourceManagerReleaseMutex_); + 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; }