From 1b777792abc1ffdfc2d06febf9bb093123b82b74 Mon Sep 17 00:00:00 2001 From: YuQing <384681@qq.com> Date: Sun, 15 Sep 2024 12:03:18 +0800 Subject: [PATCH] task init callback support extra argument --- HISTORY | 3 +++ src/fast_task_queue.c | 6 ++++-- src/fast_task_queue.h | 8 +++++--- src/server_id_func.c | 4 +++- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/HISTORY b/HISTORY index 3fc1b51..68b1fe3 100644 --- a/HISTORY +++ b/HISTORY @@ -1,4 +1,7 @@ +Version 1.75 2024-09-15 + * task init callback support extra argument + Version 1.74 2024-05-18 * add functions: get_log_level and get_log_level_caption * adapt to FreeBSD 13 diff --git a/src/fast_task_queue.c b/src/fast_task_queue.c index cf6b785..5696946 100644 --- a/src/fast_task_queue.c +++ b/src/fast_task_queue.c @@ -53,7 +53,7 @@ static int task_alloc_init(struct fast_task_info *task, task->free_queue = queue; if (queue->init_callback != NULL) { - return queue->init_callback(task); + return queue->init_callback(task, queue->init_arg); } return 0; } @@ -62,7 +62,8 @@ int free_queue_init_ex2(struct fast_task_queue *queue, const char *name, const bool double_buffers, const int max_connections, const int alloc_task_once, const int min_buff_size, const int max_buff_size, const int padding_size, - const int arg_size, TaskInitCallback init_callback) + const int arg_size, TaskInitCallback init_callback, + void *init_arg) { #define MAX_DATA_SIZE (256 * 1024 * 1024) int alloc_once; @@ -127,6 +128,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->init_arg = init_arg; queue->release_callback = NULL; /* diff --git a/src/fast_task_queue.h b/src/fast_task_queue.h index 3ce3472..133d3e9 100644 --- a/src/fast_task_queue.h +++ b/src/fast_task_queue.h @@ -39,7 +39,7 @@ struct fast_task_info; 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 int (*TaskInitCallback)(struct fast_task_info *task, void *arg); typedef void (*TaskReleaseCallback)(struct fast_task_info *task); typedef void (*IOEventCallback) (int sock, short event, void *arg); @@ -155,6 +155,7 @@ struct fast_task_queue bool double_buffers; //if send buffer and recv buffer are independent struct fast_mblock_man allocator; TaskInitCallback init_callback; + void *init_arg; TaskReleaseCallback release_callback; }; @@ -166,7 +167,8 @@ int free_queue_init_ex2(struct fast_task_queue *queue, const char *name, const bool double_buffers, const int max_connections, const int alloc_task_once, const int min_buff_size, const int max_buff_size, const int padding_size, - const int arg_size, TaskInitCallback init_callback); + const int arg_size, TaskInitCallback init_callback, + void *init_arg); static inline int free_queue_init_ex(struct fast_task_queue *queue, const char *name, const bool double_buffers, @@ -177,7 +179,7 @@ static inline int free_queue_init_ex(struct fast_task_queue *queue, const int padding_size = 0; return free_queue_init_ex2(queue, name, double_buffers, max_connections, alloc_task_once, min_buff_size, max_buff_size, padding_size, - arg_size, NULL); + arg_size, NULL, NULL); } static inline int free_queue_init(struct fast_task_queue *queue, diff --git a/src/server_id_func.c b/src/server_id_func.c index 968c8c7..16ea874 100644 --- a/src/server_id_func.c +++ b/src/server_id_func.c @@ -1798,7 +1798,9 @@ struct ibv_pd *fc_alloc_rdma_pd(fc_alloc_pd_callback alloc_pd, } end = address_array->addrs + address_array->count; - for (addr=address_array->addrs, ip_addr=ip_addrs; addraddrs, ip_addr=ip_addrs; + addrconn.ip_addr; }