task init callback support extra argument

use_iouring
YuQing 2024-09-15 12:03:18 +08:00
parent 2ab381d5e3
commit 1b777792ab
4 changed files with 15 additions and 6 deletions

View File

@ -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

View File

@ -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;
/*

View File

@ -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,

View File

@ -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; addr<end; addr++) {
for (addr=address_array->addrs, ip_addr=ip_addrs;
addr<end; addr++, ip_addr++)
{
*ip_addr = (*addr)->conn.ip_addr;
}