struct fast_task_queue support release callback
parent
a1914ea249
commit
eafe769759
|
|
@ -127,6 +127,7 @@ int free_queue_init_ex2(struct fast_task_queue *queue, const char *name,
|
||||||
queue->padding_size = aligned_padding_size;
|
queue->padding_size = aligned_padding_size;
|
||||||
queue->arg_size = aligned_arg_size;
|
queue->arg_size = aligned_arg_size;
|
||||||
queue->init_callback = init_callback;
|
queue->init_callback = init_callback;
|
||||||
|
queue->release_callback = NULL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
logInfo("file: "__FILE__", line: %d, [%s] double_buffers: %d, "
|
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)
|
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->client_ip) = '\0';
|
||||||
task->send.ptr->length = 0;
|
task->send.ptr->length = 0;
|
||||||
task->send.ptr->offset = 0;
|
task->send.ptr->offset = 0;
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@ typedef int (*ThreadLoopCallback) (struct nio_thread_data *pThreadData);
|
||||||
typedef int (*TaskFinishCallback) (struct fast_task_info *task);
|
typedef int (*TaskFinishCallback) (struct fast_task_info *task);
|
||||||
typedef void (*TaskCleanUpCallback) (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);
|
||||||
|
typedef void (*TaskReleaseCallback)(struct fast_task_info *task);
|
||||||
|
|
||||||
typedef void (*IOEventCallback) (int sock, short event, void *arg);
|
typedef void (*IOEventCallback) (int sock, short event, void *arg);
|
||||||
typedef int (*TaskContinueCallback)(struct fast_task_info *task);
|
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
|
bool double_buffers; //if send buffer and recv buffer are independent
|
||||||
struct fast_mblock_man allocator;
|
struct fast_mblock_man allocator;
|
||||||
TaskInitCallback init_callback;
|
TaskInitCallback init_callback;
|
||||||
|
TaskReleaseCallback release_callback;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
@ -179,6 +181,13 @@ static inline int free_queue_init_ex(struct fast_task_queue *queue,
|
||||||
arg_size, NULL);
|
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);
|
void free_queue_destroy(struct fast_task_queue *queue);
|
||||||
|
|
||||||
static inline struct fast_task_info *free_queue_pop(
|
static inline struct fast_task_info *free_queue_pop(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue