diff --git a/maestro/pool_client.c b/maestro/pool_client.c index c6bcbb04ef73c66baf750ef1442bc6e9b6a57902..02cb60f41362de98f00e65b8254b90c211b6668b 100644 --- a/maestro/pool_client.c +++ b/maestro/pool_client.c @@ -867,19 +867,20 @@ mstro_pc__handle_initiate_transfer(const Mstro__Pool__InitiateTransfer* init, return MSTRO_FAIL; #endif break; - case MSTRO__POOL__TRANSFER_TICKET__TICKET_OFI: + case MSTRO__POOL__TRANSFER_TICKET__TICKET_OFI: { NOISE("TICKET CASE RDMA\n"); - appid.id = init->dst_appid->id; + appid.id = init->dst_appid->id; ofi.dstid = &appid; - struct mstro_pm_app_registry_entry *e; + struct mstro_pm_app_registry_entry *e; mstro_status status = mstro_pm_app_lookup(appid.id, &e); - assert(e!=NULL); // we befriended dst app earlier, it should be in the registry + assert(e!=NULL); // we befriended dst app earlier, it should be in the registry ticket.src_serialized_endpoint = e->ep->serialized; ofi.h = &rh; /* rest to be filled in transport_execute */ ticket.want_completion = 1; /* so we can refcount-- */ ticket.ofi = &ofi; - - break; + + break; + } default: ERR("Unsupported ticket kind %d\n", ticket.ticket_case); return MSTRO_UNIMPL; @@ -933,6 +934,18 @@ mstro_pc__handle_initiate_transfer(const Mstro__Pool__InitiateTransfer* init, } mstro_stats_add_counter(MSTRO_STATS_CAT_PROTOCOL, MSTRO_STATS_L_PC_NUM_TICKETS_OUT, 1); + + /* cleanup ticket content that is not stack-allocated */ + switch(ticket.ticket_case) { + case MSTRO__POOL__TRANSFER_TICKET__TICKET_OFI: { + free(ticket.ofi->h->mr_key.data); + ticket.ofi->h->mr_key.len = 0; + break; + } + default: + break; + } + return MSTRO_OK; }