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()?

Reply via email to