@@ -212,6 +212,12 @@ static void _odp_cls_update_hash_proto(cos_t *cos,
cos->s.hash_proto.udp = 1;
}
+static inline void _cls_queue_unwind(uint32_t tbl_index, uint32_t j)
+{
+ while (j > 0)
+ odp_queue_destroy(queue_grp_tbl->s.queue[tbl_index + --j]);
+}
+
odp_cos_t odp_cls_cos_create(const char *name, odp_cls_cos_param_t *param)
{
int i, j;
@@ -255,6 +261,8 @@ odp_cos_t odp_cls_cos_create(const char *name, odp_cls_cos_param_t *param)
queue = odp_queue_create(NULL, &cos->s.
queue_param);
if (queue == ODP_QUEUE_INVALID) {
+ /* unwind the queues */
+ _cls_queue_unwind(tbl_index, j);
UNLOCK(&cos->s.lock);
return ODP_COS_INVALID;
}