Details
Description
--- Sources/core/eip_gci_packethandlers.c (revision 89014)
+++ Sources/core/eip_gci_packethandlers.c (working copy)
@@ -105,7 +105,7 @@
return EIP_PACKET_DONE;
}
-static void eip_gci_remanent_delete_finished_callback(void* pvParam, CIP_OBJ_RESPONSE_T* ptResponse)
+static void eip_gci_delete_config_request_remanent_delete_finished_callback(void* pvParam, CIP_OBJ_RESPONSE_T* ptResponse)
{
EIP_GCI_ACYCLIC_REQUEST_T *ptAcyclicRequest = pvParam;
struct HIL_GCI_COMP_Ttag *ptRsc = ptAcyclicRequest->ptRsc;
@@ -139,7 +139,7 @@
}
else
{
- eip_gci_remanent_delete(ptRsc, eip_gci_remanent_delete_finished_callback, ptAcyclicRequest);
+ eip_gci_remanent_delete(ptRsc, eip_gci_delete_config_request_remanent_delete_finished_callback, ptAcyclicRequest);
return EIP_PACKET_KEEP;
}
}
@@ -862,7 +862,9 @@
PS_Worker_QueueJob(ptRsc->hGciWorker, &ptRsc->tStackRebootJob);
}
- eip_gci_acyclic_finish(ptHostOrder->ptAcyclicRequest);
+ /* This was a confirmation/response, so we have to free the acyclic request */
+ assert(ptHostOrder->ptAcyclicRequest->tPacketHeader.ulCmd == EIP_OBJECT_RESET_RES);
+ eip_gci_acyclic_free_resources(ptHostOrder->ptAcyclicRequest);
EIP_GCI_FREE_RESOURCE(ptHostOrder);
}
The reset response is replied to instead of freed when it has been fully handled.