diff --git a/KAELz4/src/v1/kaelz4_ctx.c b/KAELz4/src/v1/kaelz4_ctx.c index dae25cbfb81a44375f2e265fd1d6fe96439c1aa7..b5a3b67ae81d376edca6da742672477438769467 100644 --- a/KAELz4/src/v1/kaelz4_ctx.c +++ b/KAELz4/src/v1/kaelz4_ctx.c @@ -374,13 +374,14 @@ void kaelz4_free_ctx(kaelz4_ctx_t* kz_ctx) } struct kaelz4_instance *instance = (struct kaelz4_instance *)kz_ctx->q_node->priv_ctx; + KAE_QUEUE_DATA_NODE_S *q_node = kz_ctx->q_node; instance->kz_ctx[kz_ctx->index] = NULL; kaelz4_free_kz_ctx(kz_ctx); instance->free_num++; if (instance->free_num == instance->cur_idx) { - kaelz4_free_wd_queue_memory(kz_ctx->q_node, kaelz4_free_instance); + kaelz4_free_wd_queue_memory(q_node, kaelz4_free_instance); if (instance == g_cur_instance) { g_cur_instance = NULL; } diff --git a/KAELz4/src/v1/wd_queue_memory.c b/KAELz4/src/v1/wd_queue_memory.c index aa2c9e7644a0ee01f7f2d73d26e51d207fcf29a4..161b0feecdf98bacb27bb0719bf0461302270a56 100644 --- a/KAELz4/src/v1/wd_queue_memory.c +++ b/KAELz4/src/v1/wd_queue_memory.c @@ -194,14 +194,14 @@ KAE_QUEUE_POOL_HEAD_S* kaelz4_init_queue_pool(int algtype) return kae_pool; } -static KAE_QUEUE_DATA_NODE_S* kaelz4_get_queue_data_from_list(KAE_QUEUE_POOL_HEAD_S* pool_head, int type) +static KAE_QUEUE_DATA_NODE_S* kaelz4_get_queue_data_from_list(KAE_QUEUE_POOL_HEAD_S* pool_head, int type, int is_sgl) { int i = 0; KAE_QUEUE_DATA_NODE_S *queue_data_node = NULL; KAE_QUEUE_POOL_HEAD_S *temp_pool = pool_head; if ((pool_head->pool_use_num == 0) && (pool_head->next == NULL)) { - return queue_data_node; + return NULL; } while (temp_pool != NULL) { @@ -211,17 +211,17 @@ static KAE_QUEUE_DATA_NODE_S* kaelz4_get_queue_data_from_list(KAE_QUEUE_POOL_HEA } if (KAE_SPIN_TRYLOCK(temp_pool->kae_queue_pool[i].spinlock)) { - if (temp_pool->kae_queue_pool[i].node_data == NULL) { + queue_data_node = temp_pool->kae_queue_pool[i].node_data; + if (queue_data_node == NULL) { KAE_SPIN_UNLOCK(temp_pool->kae_queue_pool[i].spinlock); continue; } - if (temp_pool->kae_queue_pool[i].node_data->comp_alg_type != type) { + if (queue_data_node->comp_alg_type != type || queue_data_node->is_sgl != is_sgl) { KAE_SPIN_UNLOCK(temp_pool->kae_queue_pool[i].spinlock); continue; } - queue_data_node = temp_pool->kae_queue_pool[i].node_data; temp_pool->kae_queue_pool[i].node_data = NULL; KAE_SPIN_UNLOCK(temp_pool->kae_queue_pool[i].spinlock); @@ -233,7 +233,7 @@ static KAE_QUEUE_DATA_NODE_S* kaelz4_get_queue_data_from_list(KAE_QUEUE_POOL_HEA temp_pool = temp_pool->next; } - return queue_data_node; + return NULL; } void kaelz4_free_wd_queue_memory(KAE_QUEUE_DATA_NODE_S *queue_node, kae_release_priv_ctx_cb release_fn) @@ -311,7 +311,7 @@ KAE_QUEUE_DATA_NODE_S* kaelz4_get_node_from_pool(KAE_QUEUE_POOL_HEAD_S* pool_hea return NULL; } - queue_data_node = kaelz4_get_queue_data_from_list(pool_head, comp_alg_type); + queue_data_node = kaelz4_get_queue_data_from_list(pool_head, comp_alg_type, is_sgl); if (queue_data_node == NULL) { queue_data_node = kaelz4_new_wd_queue_memory(comp_alg_type, comp_type, is_sgl); }