From 6ccf936ee5e3435af72e2e3cef3960b952625c7d Mon Sep 17 00:00:00 2001 From: YuQing <384681@qq.com> Date: Wed, 30 Sep 2020 19:30:12 +0800 Subject: [PATCH] add function: sf_terminate_myself --- src/sf_binlog_writer.c | 2 +- src/sf_func.c | 2 +- src/sf_func.h | 19 +++++++++++++++++++ src/sf_nio.c | 38 +++++++++++++++++++------------------- 4 files changed, 40 insertions(+), 21 deletions(-) diff --git a/src/sf_binlog_writer.c b/src/sf_binlog_writer.c index 7ba74b0..6b66ed8 100644 --- a/src/sf_binlog_writer.c +++ b/src/sf_binlog_writer.c @@ -571,7 +571,7 @@ static void *binlog_writer_func(void *arg) logCrit("file: "__FILE__", line: %d, " "deal_binlog_records fail, " "program exit!", __LINE__); - SF_G_CONTINUE_FLAG = false; + sf_terminate_myself(); } } diff --git a/src/sf_func.c b/src/sf_func.c index 8480506..d165f28 100644 --- a/src/sf_func.c +++ b/src/sf_func.c @@ -47,7 +47,7 @@ static void sf_memory_oom_notify_callback(const size_t curr_size) logCrit("file: "__FILE__", line: %d, " "alloc %"PRId64" bytes fail, exiting ...", __LINE__, (int64_t)curr_size); - SF_G_CONTINUE_FLAG = false; + sf_terminate_myself(); } void sf_enable_exit_on_oom() diff --git a/src/sf_func.h b/src/sf_func.h index a9be66b..34f7bb4 100644 --- a/src/sf_func.h +++ b/src/sf_func.h @@ -5,6 +5,7 @@ #include "fastcommon/common_define.h" #include "sf_types.h" +#include "sf_global.h" #ifdef __cplusplus extern "C" { @@ -12,6 +13,24 @@ extern "C" { int sf_connect_to_server(const char *ip_addr, const int port, int *sock); +#define sf_terminate_myself() \ + sf_terminate_myself_ex(__FILE__, __LINE__, __FUNCTION__) + +static inline void sf_terminate_myself_ex(const char *file, + const int line, const char *func) +{ + g_sf_global_vars.continue_flag = false; + if (kill(getpid(), SIGQUIT) == 0) { //signal myself to quit + logInfo("file: "__FILE__", line: %d, " + "kill myself from caller {file: %s, line: %d, func: %s}", + __LINE__, file, line, func); + } else { + logError("file: "__FILE__", line: %d, " + "kill myself fail, errno: %d, error info: %s", + __LINE__, errno, strerror(errno)); + } +} + void sf_enable_exit_on_oom(); static inline int sf_binlog_buffer_init(SFBinlogBuffer *buffer, const int size) diff --git a/src/sf_nio.c b/src/sf_nio.c index 70e04c4..1d79dd9 100644 --- a/src/sf_nio.c +++ b/src/sf_nio.c @@ -98,7 +98,7 @@ static inline int set_write_event(struct fast_task_info *task) task->event.fd, IOEVENT_WRITE, task) != 0) { result = errno != 0 ? errno : ENOENT; - iovent_add_to_deleted_list(task); + ioevent_add_to_deleted_list(task); logError("file: "__FILE__", line: %d, " "ioevent_modify fail, " @@ -123,7 +123,7 @@ int sf_set_read_event(struct fast_task_info *task) task->event.fd, IOEVENT_READ, task) != 0) { result = errno != 0 ? errno : ENOENT; - iovent_add_to_deleted_list(task); + ioevent_add_to_deleted_list(task); logError("file: "__FILE__", line: %d, " "ioevent_modify fail, " @@ -180,7 +180,7 @@ static int sf_client_sock_connect(int sock, short event, void *arg) "connect to server %s:%u fail, errno: %d, " "error info: %s", __LINE__, task->server_ip, task->port, result, STRERROR(result)); - iovent_add_to_deleted_list(task); + ioevent_add_to_deleted_list(task); return -1; } @@ -278,7 +278,7 @@ static int sf_nio_deal_task(struct fast_task_info *task) } if (result < 0) { - iovent_add_to_deleted_list(task); + ioevent_add_to_deleted_list(task); } return result; @@ -416,7 +416,7 @@ int sf_client_sock_read(int sock, short event, void *arg) if (task->offset == 0 && task->req_count > 0) { if (SF_CTX->timeout_callback != NULL) { if (SF_CTX->timeout_callback(task) != 0) { - iovent_add_to_deleted_list(task); + ioevent_add_to_deleted_list(task); return -1; } } @@ -438,7 +438,7 @@ int sf_client_sock_read(int sock, short event, void *arg) __LINE__, task->client_ip, task->req_count); } - iovent_add_to_deleted_list(task); + ioevent_add_to_deleted_list(task); return -1; } @@ -450,7 +450,7 @@ int sf_client_sock_read(int sock, short event, void *arg) "client ip: %s, recv error event: %d, " "close connection", __LINE__, task->client_ip, event); - iovent_add_to_deleted_list(task); + ioevent_add_to_deleted_list(task); return -1; } @@ -493,7 +493,7 @@ int sf_client_sock_read(int sock, short event, void *arg) __LINE__, task->client_ip, errno, strerror(errno)); - iovent_add_to_deleted_list(task); + ioevent_add_to_deleted_list(task); return -1; } } else if (bytes == 0) { @@ -519,7 +519,7 @@ int sf_client_sock_read(int sock, short event, void *arg) __LINE__, task->client_ip, sock); } - iovent_add_to_deleted_list(task); + ioevent_add_to_deleted_list(task); return -1; } @@ -531,7 +531,7 @@ int sf_client_sock_read(int sock, short event, void *arg) } if (SF_CTX->set_body_length(task) != 0) { - iovent_add_to_deleted_list(task); + ioevent_add_to_deleted_list(task); return -1; } if (task->length < 0) { @@ -540,7 +540,7 @@ int sf_client_sock_read(int sock, short event, void *arg) __LINE__, task->client_ip, task->length); - iovent_add_to_deleted_list(task); + ioevent_add_to_deleted_list(task); return -1; } @@ -552,7 +552,7 @@ int sf_client_sock_read(int sock, short event, void *arg) task->client_ip, task->length, g_sf_global_vars.max_pkg_size); - iovent_add_to_deleted_list(task); + ioevent_add_to_deleted_list(task); return -1; } @@ -566,7 +566,7 @@ int sf_client_sock_read(int sock, short event, void *arg) __LINE__, task->client_ip, task->size, task->length); - iovent_add_to_deleted_list(task); + ioevent_add_to_deleted_list(task); return -1; } @@ -577,7 +577,7 @@ int sf_client_sock_read(int sock, short event, void *arg) "from %d to %d fail", __LINE__, task->client_ip, task->size, task->length); - iovent_add_to_deleted_list(task); + ioevent_add_to_deleted_list(task); return -1; } @@ -592,7 +592,7 @@ int sf_client_sock_read(int sock, short event, void *arg) task->req_count++; sf_nio_set_stage(task, SF_NIO_STAGE_SEND); if (SF_CTX->deal_task(task) < 0) { //fatal error - iovent_add_to_deleted_list(task); + ioevent_add_to_deleted_list(task); return -1; } break; @@ -622,7 +622,7 @@ int sf_client_sock_write(int sock, short event, void *arg) "remain: %d", __LINE__, task->client_ip, task->length, task->offset, task->length - task->offset); - iovent_add_to_deleted_list(task); + ioevent_add_to_deleted_list(task); return -1; } @@ -631,7 +631,7 @@ int sf_client_sock_write(int sock, short event, void *arg) "client ip: %s, recv error event: %d, " "close connection", __LINE__, task->client_ip, event); - iovent_add_to_deleted_list(task); + ioevent_add_to_deleted_list(task); return -1; } @@ -674,7 +674,7 @@ int sf_client_sock_write(int sock, short event, void *arg) __LINE__, task->client_ip, errno, strerror(errno)); - iovent_add_to_deleted_list(task); + ioevent_add_to_deleted_list(task); return -1; } } else if (bytes == 0) { @@ -683,7 +683,7 @@ int sf_client_sock_write(int sock, short event, void *arg) "connection disconnected", __LINE__, task->client_ip, sock); - iovent_add_to_deleted_list(task); + ioevent_add_to_deleted_list(task); return -1; }