diff --git a/src/iec61850/server/mms_mapping/reporting.c b/src/iec61850/server/mms_mapping/reporting.c index ce2509c3..d7a9b6b3 100644 --- a/src/iec61850/server/mms_mapping/reporting.c +++ b/src/iec61850/server/mms_mapping/reporting.c @@ -646,23 +646,28 @@ updateReportDataset(MmsMapping* mapping, ReportControl* rc, MmsValue* newDatSet, #endif /* (MMS_DYNAMIC_DATA_SETS == 1) */ - deleteDataSetValuesShadowBuffer(rc); + if ((dataSet == NULL) || (dataSetChanged == true)) { - rc->dataSet = dataSet; + /* delete pending event and create buffer for new data set */ + deleteDataSetValuesShadowBuffer(rc); + + rc->dataSet = dataSet; - createDataSetValuesShadowBuffer(rc); + createDataSetValuesShadowBuffer(rc); - if (rc->inclusionField != NULL) - MmsValue_delete(rc->inclusionField); + if (rc->inclusionField != NULL) + MmsValue_delete(rc->inclusionField); - rc->inclusionField = MmsValue_newBitString(dataSet->elementCount); + rc->inclusionField = MmsValue_newBitString(dataSet->elementCount); - rc->triggered = false; + rc->triggered = false; - if (rc->inclusionFlags != NULL) - GLOBAL_FREEMEM(rc->inclusionFlags); + if (rc->inclusionFlags != NULL) + GLOBAL_FREEMEM(rc->inclusionFlags); - rc->inclusionFlags = (uint8_t*) GLOBAL_CALLOC(dataSet->elementCount, sizeof(uint8_t)); + rc->inclusionFlags = (uint8_t*) GLOBAL_CALLOC(dataSet->elementCount, sizeof(uint8_t)); + + } success = true;