On Wed, Nov 18, 2015 at 9:47 AM, Stuart Haslam <[email protected]>
wrote:

> The scheduler validation test occasionally deadlocks due to a missing
> ticketlock unlock.
>
> Signed-off-by: Stuart Haslam <[email protected]>
>

Reviewed-by: Bill Fischofer <[email protected]>


> ---
>  test/validation/scheduler/scheduler.c | 15 ++++++++++-----
>  1 file changed, 10 insertions(+), 5 deletions(-)
>
> diff --git a/test/validation/scheduler/scheduler.c
> b/test/validation/scheduler/scheduler.c
> index f8effb3..2bd180c 100644
> --- a/test/validation/scheduler/scheduler.c
> +++ b/test/validation/scheduler/scheduler.c
> @@ -593,6 +593,7 @@ static void *schedule_common_(void *arg)
>         queue_context *qctx;
>         buf_contents *bctx, *bctx_cpy;
>         odp_pool_t pool;
> +       int locked;
>
>         globals = args->globals;
>         sync = args->sync;
> @@ -608,7 +609,6 @@ static void *schedule_common_(void *arg)
>                 odp_buffer_t buf, buf_cpy;
>                 odp_queue_t from = ODP_QUEUE_INVALID;
>                 int num = 0;
> -               int locked;
>
>                 odp_ticketlock_lock(&globals->lock);
>                 if (globals->buf_count == 0) {
> @@ -747,9 +747,12 @@ static void *schedule_common_(void *arg)
>         if (args->num_workers > 1)
>                 odp_barrier_wait(&globals->barrier);
>
> -       if (sync == ODP_SCHED_SYNC_ORDERED &&
> -           odp_ticketlock_trylock(&globals->lock) &&
> -           globals->buf_count_cpy > 0) {
> +       if (sync == ODP_SCHED_SYNC_ORDERED)
> +               locked = odp_ticketlock_trylock(&globals->lock);
> +       else
> +               locked = 0;
> +
> +       if (locked && globals->buf_count_cpy > 0) {
>                 odp_event_t ev;
>                 odp_queue_t pq;
>                 uint64_t seq;
> @@ -787,9 +790,11 @@ static void *schedule_common_(void *arg)
>                 }
>                 CU_ASSERT(bcount == buf_count);
>                 globals->buf_count_cpy = 0;
> -               odp_ticketlock_unlock(&globals->lock);
>         }
>
> +       if (locked)
> +               odp_ticketlock_unlock(&globals->lock);
> +
>         return NULL;
>  }
>
> --
> 2.1.1
>
> _______________________________________________
> lng-odp mailing list
> [email protected]
> https://lists.linaro.org/mailman/listinfo/lng-odp
>
_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to