From d5f2172f938c4b1bf5cb28ef91318d8ee6544d8e 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 80edcb81..70527812 100644 --- a/src/iec61850/server/impl/ied_server.c +++ b/src/iec61850/server/impl/ied_server.c @@ -908,10 +908,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); @@ -930,10 +930,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); }