aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetri Savolainen <petri.savolainen@linaro.org>2018-06-19 16:58:08 +0300
committerMaxim Uvarov <maxim.uvarov@linaro.org>2018-06-25 23:30:05 +0300
commit3c335400833959b9a96674984c797e8ec4734566 (patch)
tree4eae85b9cb511fcbf549c7a9d845b2133fbc0b19
parentdd7bcc7dead9bceba895ad877ad3ac7642d4e717 (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.c9
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;