- IED server: fixed - segmentation fault when compiled with CONFIG_MMS_THREADLESS_STACK (LIB61850-398)

v1.5_develop_399
Michael Zillgith 2 years ago
parent 48b73261c3
commit 097c055f96

@ -325,7 +325,10 @@ struct sMmsMapping {
/* flag indicates if data model is locked --> prevents reports to be sent */
bool isModelLocked;
#if (CONFIG_MMS_THREADLESS_STACK != 1)
Semaphore isModelLockedMutex;
#endif /* (CONFIG_MMS_THREADLESS_STACK != 1) */
IedServer iedServer;

@ -814,11 +814,15 @@ IedServer_lockDataModel(IedServer self)
{
MmsServer_lockModel(self->mmsServer);
#if (CONFIG_MMS_THREADLESS_STACK != 1)
Semaphore_wait(self->mmsMapping->isModelLockedMutex);
#endif
self->mmsMapping->isModelLocked = true;
#if (CONFIG_MMS_THREADLESS_STACK != 1)
Semaphore_post(self->mmsMapping->isModelLockedMutex);
#endif
}
void
@ -832,13 +836,17 @@ IedServer_unlockDataModel(IedServer self)
/* check if reports have to be sent! */
Reporting_processReportEventsAfterUnlock(self->mmsMapping);
#if (CONFIG_MMS_THREADLESS_STACK != 1)
Semaphore_wait(self->mmsMapping->isModelLockedMutex);
#endif
MmsServer_unlockModel(self->mmsServer);
self->mmsMapping->isModelLocked = false;
#if (CONFIG_MMS_THREADLESS_STACK != 1)
Semaphore_post(self->mmsMapping->isModelLockedMutex);
#endif
}
#if (CONFIG_IEC61850_CONTROL_SERVICE == 1)

@ -3670,7 +3670,9 @@ MmsMapping_triggerReportObservers(MmsMapping* self, MmsValue* value, int flag)
{
LinkedList element = self->reportControls;
#if (CONFIG_MMS_THREADLESS_STACK != 1)
Semaphore_wait(self->isModelLockedMutex);
#endif
bool modelLocked = self->isModelLocked;
@ -3708,7 +3710,9 @@ MmsMapping_triggerReportObservers(MmsMapping* self, MmsValue* value, int flag)
Reporting_processReportEventsAfterUnlock(self);
}
#if (CONFIG_MMS_THREADLESS_STACK != 1)
Semaphore_post(self->isModelLockedMutex);
#endif
}
#endif /* (CONFIG_IEC61850_REPORT_SERVICE == 1) */
@ -3729,13 +3733,17 @@ MmsMapping_triggerGooseObservers(MmsMapping* self, MmsValue* value)
if (DataSet_isMemberValue(dataSet, value, NULL)) {
MmsGooseControlBlock_setStateChangePending(gcb);
#if (CONFIG_MMS_THREADLESS_STACK != 1)
Semaphore_wait(self->isModelLockedMutex);
#endif
if (self->isModelLocked == false) {
MmsGooseControlBlock_publishNewState(gcb);
}
#if (CONFIG_MMS_THREADLESS_STACK != 1)
Semaphore_post(self->isModelLockedMutex);
#endif
}
}
}

@ -3877,7 +3877,9 @@ processEventsForReport(ReportControl* rc, uint64_t currentTimeInMs)
void
Reporting_processReportEvents(MmsMapping* self, uint64_t currentTimeInMs)
{
#if (CONFIG_MMS_THREADLESS_STACK != 1)
Semaphore_wait(self->isModelLockedMutex);
#endif
if (self->isModelLocked == false) {
@ -3894,7 +3896,9 @@ Reporting_processReportEvents(MmsMapping* self, uint64_t currentTimeInMs)
}
}
#if (CONFIG_MMS_THREADLESS_STACK != 1)
Semaphore_post(self->isModelLockedMutex);
#endif
}
/*

Loading…
Cancel
Save