From 219111eef1eed504bf8ffe86053038457a55eb71 Mon Sep 17 00:00:00 2001 From: Michael Zillgith Date: Wed, 24 Aug 2022 08:40:50 +0200 Subject: [PATCH] - IED server: fixed - possible deadlock when IedServer_lockDataModel is used from multiple threads (LIB61850-352) --- src/iec61850/server/impl/ied_server.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/iec61850/server/impl/ied_server.c b/src/iec61850/server/impl/ied_server.c index 1b804071..c6fdeffc 100644 --- a/src/iec61850/server/impl/ied_server.c +++ b/src/iec61850/server/impl/ied_server.c @@ -811,10 +811,10 @@ IedServer_stopThreadless(IedServer self) void IedServer_lockDataModel(IedServer self) { - Semaphore_wait(self->mmsMapping->isModelLockedMutex); - MmsServer_lockModel(self->mmsServer); + Semaphore_wait(self->mmsMapping->isModelLockedMutex); + self->mmsMapping->isModelLocked = true; Semaphore_post(self->mmsMapping->isModelLockedMutex); @@ -833,10 +833,10 @@ IedServer_unlockDataModel(IedServer self) Semaphore_wait(self->mmsMapping->isModelLockedMutex); - self->mmsMapping->isModelLocked = false; - MmsServer_unlockModel(self->mmsServer); + self->mmsMapping->isModelLocked = false; + Semaphore_post(self->mmsMapping->isModelLockedMutex); }