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

Reply via email to