- fixed - IEC 61580 server: dataset is not released when RCB.Datset is set to empty string by client (LIB61850-425)

pull/487/head
Michael Zillgith 2 years ago
parent ec9519a0e7
commit 1072d54f13

@ -685,9 +685,23 @@ updateReportDataset(MmsMapping* mapping, ReportControl* rc, MmsValue* newDatSet,
success = true; success = true;
dataSetValue = NULL; dataSetValue = NULL;
if (rc->buffered) { if (rc->dataSet) {
rc->isBuffering = false; if (rc->buffered) {
purgeBuf(rc); rc->isBuffering = false;
purgeBuf(rc);
}
/* delete pending events */
deleteDataSetValuesShadowBuffer(rc);
if (rc->isDynamicDataSet) {
if (rc->dataSet) {
MmsMapping_freeDynamicallyCreatedDataSet(rc->dataSet);
}
}
/* release used data set */
rc->dataSet = NULL;
} }
} }
else else
@ -700,7 +714,6 @@ updateReportDataset(MmsMapping* mapping, ReportControl* rc, MmsValue* newDatSet,
/* check if old and new data sets are the same */ /* check if old and new data sets are the same */
if (rc->dataSet && dataSetValue) { if (rc->dataSet && dataSetValue) {
const char* dataSetLdName = rc->dataSet->logicalDeviceName; const char* dataSetLdName = rc->dataSet->logicalDeviceName;
const char* dataSetName = rc->dataSet->name; const char* dataSetName = rc->dataSet->name;
const char* newDataSetName = MmsValue_toString(dataSetValue); const char* newDataSetName = MmsValue_toString(dataSetValue);
@ -737,16 +750,7 @@ updateReportDataset(MmsMapping* mapping, ReportControl* rc, MmsValue* newDatSet,
} }
} }
if (rc->isDynamicDataSet) { if (dataSetValue) {
if (rc->dataSet && dataSetChanged) {
deleteDataSetValuesShadowBuffer(rc);
MmsMapping_freeDynamicallyCreatedDataSet(rc->dataSet);
rc->isDynamicDataSet = false;
rc->dataSet = NULL;
}
}
if (dataSetValue && dataSetChanged) {
const char* dataSetName = MmsValue_toString(dataSetValue); const char* dataSetName = MmsValue_toString(dataSetValue);
DataSet* dataSet = IedModel_lookupDataSet(mapping->model, dataSetName); DataSet* dataSet = IedModel_lookupDataSet(mapping->model, dataSetName);

Loading…
Cancel
Save