On 10.05.2017 21:09, Maxim Uvarov wrote: > On 05/10/2017 09:00 PM, Dmitry Eremin-Solenikov wrote: >> 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); >> >> > So do you suggest something like odp_ipsec_packet_result_free()?
Ugh, no, of course. -- With best wishes Dmitry