On 10 March 2015 at 15:59, Maxim Uvarov <[email protected]> wrote:
> On 03/10/15 17:43, Ola Liljedahl wrote:
>>
>> Ensure that the timeout user_ptr and timer fields are set when the
>> corresponding timer is immediately cancelled.
>> https://bugs.linaro.org/show_bug.cgi?id=1313
>>
>> Signed-off-by: Ola Liljedahl <[email protected]>
>> ---
>> (This document/code contribution attached is provided under the terms of
>> agreement LES-LTM-21309)
>>
>> Passes odp_timer validation with the new odp_timer_cancel() test from
>> Petri.
>>
>>   platform/linux-generic/odp_timer.c | 18 ++++++++++++++----
>>   1 file changed, 14 insertions(+), 4 deletions(-)
>>
>> diff --git a/platform/linux-generic/odp_timer.c
>> b/platform/linux-generic/odp_timer.c
>> index 61a02b6..6b48d2e 100644
>> --- a/platform/linux-generic/odp_timer.c
>> +++ b/platform/linux-generic/odp_timer.c
>> @@ -421,6 +421,16 @@ static bool timer_reset(uint32_t idx,
>>   #endif
>>         } else {
>>                 /* We have a new timeout buffer which replaces any old one
>> */
>> +               /* Fill in header fields if timeout event */
>> +               if (_odp_buffer_type(*tmo_buf) == ODP_EVENT_TIMEOUT) {
>> +                       /* Convert from buffer to timeout hdr */
>> +                       odp_timeout_hdr_t *tmo_hdr =
>> +                               timeout_hdr_from_buf(*tmo_buf);
>
> as we discussed earlier  this 2 definitions of tmo_hdr can be one on top of
> timer_expire().
> int succ  can be int ret and also defined on top.
Yes they can but that would be a different coding style. It is OK to
declare variables at beginning of a block, even Linux does it (see
Petri's example). This has been OK since the beginning of time (the
start of the Epoch, Jan. 1st 1970).

>
> Maxim.
>
>> +                       tmo_hdr->timer = tp_idx_to_handle(tp, idx);
>> +                       tmo_hdr->user_ptr = tp->timers[idx].user_ptr;
>> +                       /* expiration field filled in when timer expires
>> */
>> +               }
>> +               /* Else ignore buffers of other types */
>>                 odp_buffer_t old_buf = ODP_BUFFER_INVALID;
>>   #ifdef ODP_ATOMIC_U128
>>                 tick_buf_t new, old;
>> @@ -556,16 +566,16 @@ static unsigned timer_expire(odp_timer_pool *tp,
>> uint32_t idx, uint64_t tick)
>>         _odp_atomic_flag_clear(IDX2LOCK(idx));
>>   #endif
>>         if (odp_likely(tmo_buf != ODP_BUFFER_INVALID)) {
>> -               /* Fill in metadata fields in system timeout buffer */
>> +               /* Fill in expiration tick if timeout event */
>>                 if (_odp_buffer_type(tmo_buf) == ODP_EVENT_TIMEOUT) {
>>                         /* Convert from buffer to timeout hdr */
>>                         odp_timeout_hdr_t *tmo_hdr =
>>                                 timeout_hdr_from_buf(tmo_buf);
>> -                       tmo_hdr->timer = tp_idx_to_handle(tp, idx);
>>                         tmo_hdr->expiration = exp_tck;
>> -                       tmo_hdr->user_ptr = tim->user_ptr;
>> +                       /* timer and user_ptr fields filled in when timer
>> +                        * was set */
>>                 }
>> -               /* Else ignore buffers of other types */
>> +               /* Else ignore events of other types */
>>                 /* Post the timeout to the destination queue */
>>                 int rc = odp_queue_enq(tim->queue,
>>                                        odp_buffer_to_event(tmo_buf));
>
>
>
> _______________________________________________
> lng-odp mailing list
> [email protected]
> http://lists.linaro.org/mailman/listinfo/lng-odp

_______________________________________________
lng-odp mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to