From 115b1e77504315fc0fcb13d2809ce1c593e13131 Mon Sep 17 00:00:00 2001 From: YuQing <384681@qq.com> Date: Wed, 11 Mar 2020 15:28:59 +0800 Subject: [PATCH] add function sf_enable_thread_notify_ex --- src/sf_nio.c | 8 ++++---- src/sf_nio.h | 2 ++ src/sf_service.c | 13 +++++++++++++ src/sf_service.h | 5 +++++ 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/sf_nio.c b/src/sf_nio.c index bed90d7..a74e391 100644 --- a/src/sf_nio.c +++ b/src/sf_nio.c @@ -109,10 +109,11 @@ static inline int set_write_event(struct fast_task_info *task) return 0; } -static inline int set_read_event(struct fast_task_info *task) +int sf_set_read_event(struct fast_task_info *task) { int result; + task->nio_stage = SF_NIO_STAGE_RECV; if (task->event.callback == (IOEventCallback)sf_client_sock_read) { return 0; } @@ -166,7 +167,7 @@ static int sf_nio_deal_task(struct fast_task_info *task) result = sf_nio_init(task); break; case SF_NIO_STAGE_RECV: - if ((result=set_read_event(task)) == 0) + if ((result=sf_set_read_event(task)) == 0) { sf_client_sock_read(task->event.fd, IOEVENT_READ, task); @@ -546,8 +547,7 @@ int sf_client_sock_write(int sock, short event, void *arg) if (task->offset >= task->length) { task->offset = 0; task->length = 0; - task->nio_stage = SF_NIO_STAGE_RECV; - if (set_read_event(task) != 0) { + if (sf_set_read_event(task) != 0) { return -1; } break; diff --git a/src/sf_nio.h b/src/sf_nio.h index 611da0a..8d7511c 100644 --- a/src/sf_nio.h +++ b/src/sf_nio.h @@ -52,6 +52,8 @@ void sf_task_finish_clean_up(struct fast_task_info *pTask); int sf_nio_notify(struct fast_task_info *pTask, const int stage); +int sf_set_read_event(struct fast_task_info *task); + void sf_task_switch_thread(struct fast_task_info *pTask, const int new_thread_index); diff --git a/src/sf_service.c b/src/sf_service.c index deb7daa..03749c1 100644 --- a/src/sf_service.c +++ b/src/sf_service.c @@ -612,3 +612,16 @@ void sf_set_current_time() g_sf_global_vars.up_time = g_current_time; srand(g_sf_global_vars.up_time); } + +void sf_enable_thread_notify_ex(SFContext *sf_context, const bool enabled) +{ + struct nio_thread_data *thread_data; + struct nio_thread_data *pDataEnd; + + pDataEnd = sf_context->thread_data + sf_context->work_threads; + for (thread_data=sf_context->thread_data; thread_datanotify.enabled = enabled; + } +} diff --git a/src/sf_service.h b/src/sf_service.h index c0a364d..8eb42a3 100644 --- a/src/sf_service.h +++ b/src/sf_service.h @@ -56,6 +56,11 @@ void sf_accept_loop_ex(SFContext *sf_context, const bool block); #define sf_accept_loop() sf_accept_loop_ex(&g_sf_context, true) +void sf_enable_thread_notify_ex(SFContext *sf_context, const bool enabled); + +#define sf_enable_thread_notify(enabled) \ + sf_enable_thread_notify_ex(&g_sf_context, enabled) + #ifdef __cplusplus } #endif