- IEC 61850 server: wait for background thread termination before data model is released

pull/228/head
Michael Zillgith 5 years ago
parent 0d4930ac25
commit f4957cf62a

@ -65,7 +65,6 @@ struct sMmsMapping {
#if (CONFIG_MMS_THREADLESS_STACK != 1) #if (CONFIG_MMS_THREADLESS_STACK != 1)
bool reportThreadRunning; bool reportThreadRunning;
bool reportThreadFinished;
Thread reportWorkerThread; Thread reportWorkerThread;
#endif #endif

@ -1352,7 +1352,7 @@ MmsMapping_destroy(MmsMapping* self)
{ {
#if (CONFIG_MMS_THREADLESS_STACK != 1) #if (CONFIG_MMS_THREADLESS_STACK != 1)
if (self->reportWorkerThread != NULL) { if (self->reportWorkerThread) {
self->reportThreadRunning = false; self->reportThreadRunning = false;
Thread_destroy(self->reportWorkerThread); Thread_destroy(self->reportWorkerThread);
} }
@ -3045,7 +3045,6 @@ static void
eventWorkerThread(MmsMapping* self) eventWorkerThread(MmsMapping* self)
{ {
bool running = true; bool running = true;
self->reportThreadFinished = false;
while (running) { while (running) {
@ -3058,8 +3057,6 @@ eventWorkerThread(MmsMapping* self)
if (DEBUG_IED_SERVER) if (DEBUG_IED_SERVER)
printf("IED_SERVER: event worker thread finished!\n"); printf("IED_SERVER: event worker thread finished!\n");
self->reportThreadFinished = true;
} }
void void
@ -3079,8 +3076,9 @@ MmsMapping_stopEventWorkerThread(MmsMapping* self)
self->reportThreadRunning = false; self->reportThreadRunning = false;
while (self->reportThreadFinished == false) Thread_destroy(self->reportWorkerThread);
Thread_sleep(1);
self->reportWorkerThread = NULL;
} }
} }
#endif /* (CONFIG_MMS_THREADLESS_STACK != 1) */ #endif /* (CONFIG_MMS_THREADLESS_STACK != 1) */

@ -712,8 +712,6 @@ mmsServer_handleGetNamedVariableListAttributesRequest(
if (variableList != NULL) { if (variableList != NULL) {
int bufSize = ByteBuffer_getSize(response);
if (createGetNamedVariableListAttributesResponse(invokeId, response, variableList) == false) { if (createGetNamedVariableListAttributesResponse(invokeId, response, variableList) == false) {
/* encoding failed - probably because buffer size is too small for message */ /* encoding failed - probably because buffer size is too small for message */

Loading…
Cancel
Save