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.