diff --git a/src/iec61850/client/ied_connection.c b/src/iec61850/client/ied_connection.c index 71058942..b394cc56 100644 --- a/src/iec61850/client/ied_connection.c +++ b/src/iec61850/client/ied_connection.c @@ -3714,19 +3714,19 @@ getDataSetHandlerInternal(uint32_t invokeId, void* parameter, MmsError err, MmsV { if (dataSet == NULL) { dataSet = ClientDataSet_create(dataSetReference); - ClientDataSet_setDataSetValues(dataSet, value); + ClientDataSet_setDataSetValues(dataSet, MmsValue_clone(value)); } else { MmsValue* dataSetValues = ClientDataSet_getValues(dataSet); MmsValue_update(dataSetValues, value); } - if (dataSetReference) - GLOBAL_FREEMEM(dataSetReference); - MmsValue_delete(value); } + if (dataSetReference) + GLOBAL_FREEMEM(dataSetReference); + handler(invokeId, call->callbackParameter, iedConnection_mapMmsErrorToIedError(err), dataSet); iedConnection_releaseOutstandingCall(self, call);