On 10.05.2017 20:57, Maxim Uvarov wrote: > On 05/10/2017 08:14 PM, Dmitry Eremin-Solenikov wrote: >> On 10.05.2017 20:13, Savolainen, Petri (Nokia - FI/Espoo) wrote: >>> >>>> -----Original Message----- >>>> From: lng-odp [mailto:lng-odp-boun...@lists.linaro.org] On Behalf Of >>>> Dmitry Eremin-Solenikov >>>> Sent: Wednesday, May 10, 2017 8:00 PM >>>> To: lng-odp-forward <lng-odp@lists.linaro.org> >>>> Subject: [lng-odp] odp_packet_free_multi with invalid packets >>>> >>>> Hello, >>>> >>>> I was looking onto a shortcut code to free packets results from IPsec >>>> call. Initially I wanted to just call odp_packet_free_multi() on top of >>>> that array. However I noticed that the function segfaults if called >>>> with >>>> an array containing ODP_PACKET_INVALID. Is it correct to call >>>> odp_packet_free_multi() on top of such arrays, or I'd better handcode >>>> such function checking and freeing packets one by one. >>> By default, results are undefined (may crash) if you pass bad handle >>> (such as XXX_INVALID) to any ODP API. That's for performance, so that >>> implementation does not validate always all handles from application. >> Yes, I remember. Basically, I wonder if odp_packet_free_multi warrants a >> lift of this rule or not, because freeing an array of packets, some of >> which might be invalid might be a useful application optimizations. >> Maybe we can define additional API like odp_packet_free_multi_safe() ? >> > what is you use case? usually it's > > odp_packet_t pks[num]; > > sent = odp_packet_send(pks, num) > > odp_packet_free(&pkts[num], num - sent) > > I.e. there is invalid packets in the middle of array.
odp_packet_t pkts[num]; odp_ipsec_packet_result_t[num]; odp_ipsec_op_result_t op_result; op_result.num_pkt = num; op_result.pkt = pkts; op_result.res = res; odp_ipsec_result(&op_result, event); /* ... process result ... */ odp_packet_free_multi(&pkts, num); -- With best wishes Dmitry