From f4957cf62a314c7743a9883a3c4763093d6e8071 Mon Sep 17 00:00:00 2001 From: Michael Zillgith Date: Sat, 28 Mar 2020 17:32:37 +0100 Subject: [PATCH] - IEC 61850 server: wait for background thread termination before data model is released --- src/iec61850/inc_private/mms_mapping_internal.h | 1 - src/iec61850/server/mms_mapping/mms_mapping.c | 10 ++++------ .../iso_mms/server/mms_named_variable_list_service.c | 2 -- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/iec61850/inc_private/mms_mapping_internal.h b/src/iec61850/inc_private/mms_mapping_internal.h index 24cc22c1..2606cf5c 100644 --- a/src/iec61850/inc_private/mms_mapping_internal.h +++ b/src/iec61850/inc_private/mms_mapping_internal.h @@ -65,7 +65,6 @@ struct sMmsMapping { #if (CONFIG_MMS_THREADLESS_STACK != 1) bool reportThreadRunning; - bool reportThreadFinished; Thread reportWorkerThread; #endif diff --git a/src/iec61850/server/mms_mapping/mms_mapping.c b/src/iec61850/server/mms_mapping/mms_mapping.c index 795e1a47..2663bcbc 100644 --- a/src/iec61850/server/mms_mapping/mms_mapping.c +++ b/src/iec61850/server/mms_mapping/mms_mapping.c @@ -1352,7 +1352,7 @@ MmsMapping_destroy(MmsMapping* self) { #if (CONFIG_MMS_THREADLESS_STACK != 1) - if (self->reportWorkerThread != NULL) { + if (self->reportWorkerThread) { self->reportThreadRunning = false; Thread_destroy(self->reportWorkerThread); } @@ -3045,7 +3045,6 @@ static void eventWorkerThread(MmsMapping* self) { bool running = true; - self->reportThreadFinished = false; while (running) { @@ -3058,8 +3057,6 @@ eventWorkerThread(MmsMapping* self) if (DEBUG_IED_SERVER) printf("IED_SERVER: event worker thread finished!\n"); - - self->reportThreadFinished = true; } void @@ -3079,8 +3076,9 @@ MmsMapping_stopEventWorkerThread(MmsMapping* self) self->reportThreadRunning = false; - while (self->reportThreadFinished == false) - Thread_sleep(1); + Thread_destroy(self->reportWorkerThread); + + self->reportWorkerThread = NULL; } } #endif /* (CONFIG_MMS_THREADLESS_STACK != 1) */ diff --git a/src/mms/iso_mms/server/mms_named_variable_list_service.c b/src/mms/iso_mms/server/mms_named_variable_list_service.c index 89634181..72d30f90 100644 --- a/src/mms/iso_mms/server/mms_named_variable_list_service.c +++ b/src/mms/iso_mms/server/mms_named_variable_list_service.c @@ -712,8 +712,6 @@ mmsServer_handleGetNamedVariableListAttributesRequest( if (variableList != NULL) { - int bufSize = ByteBuffer_getSize(response); - if (createGetNamedVariableListAttributesResponse(invokeId, response, variableList) == false) { /* encoding failed - probably because buffer size is too small for message */