diff options
author | Petri Savolainen <petri.savolainen@linaro.org> | 2018-06-19 16:58:08 +0300 |
---|---|---|
committer | Maxim Uvarov <maxim.uvarov@linaro.org> | 2018-06-25 23:30:05 +0300 |
commit | 3c335400833959b9a96674984c797e8ec4734566 (patch) | |
tree | 4eae85b9cb511fcbf549c7a9d845b2133fbc0b19 | |
parent | dd7bcc7dead9bceba895ad877ad3ac7642d4e717 (diff) |
linux-gen: queue: fix queue empty check
SPSC and normal queues use different rings.
Signed-off-by: Petri Savolainen <petri.savolainen@linaro.org>
Reviewed-by: Bill Fischofer <bill.fischofer@linaro.org>
Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
-rw-r--r-- | platform/linux-generic/odp_queue_basic.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/platform/linux-generic/odp_queue_basic.c b/platform/linux-generic/odp_queue_basic.c index f592ef6ca..39e2d59cb 100644 --- a/platform/linux-generic/odp_queue_basic.c +++ b/platform/linux-generic/odp_queue_basic.c @@ -383,6 +383,7 @@ void sched_cb_queue_set_status(uint32_t queue_index, int status) static int queue_destroy(odp_queue_t handle) { + int empty; queue_entry_t *queue; queue = qentry_from_handle(handle); @@ -400,7 +401,13 @@ static int queue_destroy(odp_queue_t handle) ODP_ERR("queue \"%s\" already destroyed\n", queue->s.name); return -1; } - if (ring_st_is_empty(&queue->s.ring_st) == 0) { + + if (queue->s.spsc) + empty = ring_spsc_is_empty(&queue->s.ring_spsc); + else + empty = ring_st_is_empty(&queue->s.ring_st); + + if (!empty) { UNLOCK(queue); ODP_ERR("queue \"%s\" not empty\n", queue->s.name); return -1; |