From eafe769759c2135d3e588947a265747fe1a499d5 Mon Sep 17 00:00:00 2001 From: YuQing <384681@qq.com> Date: Thu, 12 Oct 2023 21:53:29 +0800 Subject: [PATCH] struct fast_task_queue support release callback --- src/fast_task_queue.c | 5 +++++ src/fast_task_queue.h | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/src/fast_task_queue.c b/src/fast_task_queue.c index a0550c3..86d9326 100644 --- a/src/fast_task_queue.c +++ b/src/fast_task_queue.c @@ -127,6 +127,7 @@ int free_queue_init_ex2(struct fast_task_queue *queue, const char *name, queue->padding_size = aligned_padding_size; queue->arg_size = aligned_arg_size; queue->init_callback = init_callback; + queue->release_callback = NULL; /* logInfo("file: "__FILE__", line: %d, [%s] double_buffers: %d, " @@ -172,6 +173,10 @@ static int _realloc_buffer(struct fast_net_buffer *buffer, void free_queue_push(struct fast_task_info *task) { + if (task->free_queue->release_callback != NULL) { + task->free_queue->release_callback(task); + } + *(task->client_ip) = '\0'; task->send.ptr->length = 0; task->send.ptr->offset = 0; diff --git a/src/fast_task_queue.h b/src/fast_task_queue.h index b5ef4f8..16ba823 100644 --- a/src/fast_task_queue.h +++ b/src/fast_task_queue.h @@ -40,6 +40,7 @@ typedef int (*ThreadLoopCallback) (struct nio_thread_data *pThreadData); typedef int (*TaskFinishCallback) (struct fast_task_info *task); typedef void (*TaskCleanUpCallback) (struct fast_task_info *task); typedef int (*TaskInitCallback)(struct fast_task_info *task); +typedef void (*TaskReleaseCallback)(struct fast_task_info *task); typedef void (*IOEventCallback) (int sock, short event, void *arg); typedef int (*TaskContinueCallback)(struct fast_task_info *task); @@ -155,6 +156,7 @@ struct fast_task_queue bool double_buffers; //if send buffer and recv buffer are independent struct fast_mblock_man allocator; TaskInitCallback init_callback; + TaskReleaseCallback release_callback; }; #ifdef __cplusplus @@ -179,6 +181,13 @@ static inline int free_queue_init_ex(struct fast_task_queue *queue, arg_size, NULL); } +static inline void free_queue_set_release_callback( + struct fast_task_queue *queue, + TaskReleaseCallback callback) +{ + queue->release_callback = callback; +} + void free_queue_destroy(struct fast_task_queue *queue); static inline struct fast_task_info *free_queue_pop(