use free_queue_set_release_callback

use_libfastcommon1.70
YuQing 2023-10-12 21:58:58 +08:00
parent e7caa614cf
commit 2b111d9568
3 changed files with 21 additions and 35 deletions

View File

@ -762,8 +762,11 @@ static void *dio_thread_entrance(void* arg)
{ {
while ((pTask=blocked_queue_pop(&(pContext->queue))) != NULL) while ((pTask=blocked_queue_pop(&(pContext->queue))) != NULL)
{ {
((StorageClientInfo *)pTask->arg)->deal_func(pTask); if (!FC_ATOMIC_GET(pTask->canceled))
storage_release_task(pTask); {
((StorageClientInfo *)pTask->arg)->deal_func(pTask);
}
sf_release_task(pTask);
} }
} }

View File

@ -1525,16 +1525,6 @@ static void storage_set_metadata_done_callback( \
sf_nio_notify(pTask, SF_NIO_STAGE_SEND); sf_nio_notify(pTask, SF_NIO_STAGE_SEND);
} }
void task_finish_clean_up(struct fast_task_info *pTask)
{
if (__sync_sub_and_fetch(&pTask->reffer_count, 0) == 1)
{
storage_clear_task(pTask);
}
++g_stat_change_count;
sf_task_finish_clean_up(pTask);
}
int storage_set_body_length(struct fast_task_info *pTask) int storage_set_body_length(struct fast_task_info *pTask)
{ {
StorageClientInfo *pClientInfo; StorageClientInfo *pClientInfo;
@ -1638,6 +1628,19 @@ static void *alloc_thread_extra_data_func(const int thread_index)
} }
} }
static void storage_clear_task(struct fast_task_info *pTask)
{
StorageClientInfo *pClientInfo;
pClientInfo = (StorageClientInfo *)pTask->arg;
if (pClientInfo->clean_func != NULL)
{
pClientInfo->clean_func(pTask);
}
memset(pTask->arg, 0, sizeof(StorageClientInfo));
++g_stat_change_count;
}
int storage_service_init() int storage_service_init()
{ {
int result; int result;
@ -1652,10 +1655,12 @@ int storage_service_init()
SF_G_EPOLL_EDGE_TRIGGER = true; SF_G_EPOLL_EDGE_TRIGGER = true;
result = sf_service_init("storage", alloc_thread_extra_data_func, result = sf_service_init("storage", alloc_thread_extra_data_func,
NULL, sock_accept_done_callback, storage_set_body_length, NULL, sock_accept_done_callback, storage_set_body_length,
sock_send_done_callback, storage_deal_task, task_finish_clean_up, sock_send_done_callback, storage_deal_task, sf_task_finish_clean_up,
NULL, 1000, sizeof(TrackerHeader), sizeof(StorageClientInfo)); NULL, 1000, sizeof(TrackerHeader), sizeof(StorageClientInfo));
sf_enable_thread_notify(false); sf_enable_thread_notify(false);
sf_set_remove_from_ready_list(false); sf_set_remove_from_ready_list(false);
free_queue_set_release_callback(&g_sf_context.
free_queue, storage_clear_task);
return result; return result;
} }

View File

@ -40,28 +40,6 @@ int storage_get_storage_path_index(int *store_path_index);
void storage_get_store_path(const char *filename, const int filename_len, void storage_get_store_path(const char *filename, const int filename_len,
int *sub_path_high, int *sub_path_low); int *sub_path_high, int *sub_path_low);
static inline void storage_clear_task(struct fast_task_info *pTask)
{
StorageClientInfo *pClientInfo;
pClientInfo = (StorageClientInfo *)pTask->arg;
if (pClientInfo->clean_func != NULL)
{
pClientInfo->clean_func(pTask);
pClientInfo->clean_func = NULL;
}
memset(pTask->arg, 0, sizeof(StorageClientInfo));
}
static inline void storage_release_task(struct fast_task_info *pTask)
{
if (FC_ATOMIC_GET(pTask->reffer_count) == 1)
{
storage_clear_task(pTask);
}
sf_release_task(pTask);
}
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif