I think the current patch solves the bug, there are no longer failures to
terminate threads which is a bug in the implementation.

It sounds like there is a new lower priority bug to clean out the example
which throws up EXAMPLE_ERR.

If that makes sense I am happy to add reviewed by.

On 20 April 2015 at 08:32, Ola Liljedahl <[email protected]> wrote:

> Fixes https://bugs.linaro.org/show_bug.cgi?id=1450
>
> Signed-off-by: Ola Liljedahl <[email protected]>
>

Tested-


> ---
> (This document/code contribution attached is provided under the terms of
> agreement LES-LTM-21309)
>
>  example/timer/odp_timer_test.c | 38 ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 38 insertions(+)
>
> diff --git a/example/timer/odp_timer_test.c
> b/example/timer/odp_timer_test.c
> index 6b60ec4..fd31466 100644
> --- a/example/timer/odp_timer_test.c
> +++ b/example/timer/odp_timer_test.c
> @@ -79,6 +79,41 @@ struct test_timer {
>  static struct test_timer tt[256];
>
>  /** @private test timeout */
> +static void free_event(odp_event_t ev)
> +{
> +       switch (odp_event_type(ev)) {
> +       case ODP_EVENT_BUFFER:
> +               odp_buffer_free(odp_buffer_from_event(ev));
> +               break;
> +       case ODP_EVENT_PACKET:
> +               odp_packet_free(odp_packet_from_event(ev));
> +               break;
> +       case ODP_EVENT_TIMEOUT:
> +               odp_timeout_free(odp_timeout_from_event(ev));
> +               break;
> +       case ODP_EVENT_CRYPTO_COMPL:
> +               odp_crypto_compl_free(odp_crypto_compl_from_event(ev));
> +               break;
> +       default:
> +               fprintf(stderr, "Unrecognized event type %d\n",
> +                       odp_event_type(ev));
> +               abort();
> +       }
> +}
> +
> +/** @private test timeout */
> +static void remove_prescheduled_events(void)
> +{
> +       odp_event_t ev;
> +       odp_queue_t queue;
> +       odp_schedule_pause();
> +       while ((ev = odp_schedule(&queue, ODP_SCHED_NO_WAIT)) !=
> +                       ODP_EVENT_INVALID) {
> +               free_event(ev);
> +       }
> +}
> +
> +/** @private test timeout */
>  static void test_abs_timeouts(int thr, test_args_t *args)
>  {
>         uint64_t period;
> @@ -173,6 +208,9 @@ static void test_abs_timeouts(int thr, test_args_t
> *args)
>         /* Since we have cancelled the timer, there is no timeout event to
>          * return from odp_timer_free() */
>         (void)odp_timer_free(ttp->tim);
> +
> +       /* Remove any prescheduled events */
> +       remove_prescheduled_events();
>  }
>
>
> --
> 1.9.1
>
> _______________________________________________
> lng-odp mailing list
> [email protected]
> https://lists.linaro.org/mailman/listinfo/lng-odp
>



-- 
Mike Holmes
Technical Manager - Linaro Networking Group
Linaro.org <http://www.linaro.org/> *│ *Open source software for ARM SoCs
_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to