diff --git a/src/iec61850/client/ied_connection.c b/src/iec61850/client/ied_connection.c index cf363c3b..338df359 100644 --- a/src/iec61850/client/ied_connection.c +++ b/src/iec61850/client/ied_connection.c @@ -4013,7 +4013,7 @@ 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 { @@ -4021,12 +4021,12 @@ getDataSetHandlerInternal(uint32_t invokeId, void* parameter, MmsError err, MmsV 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);