support error handler callback

pull/1/head
YuQing 2021-06-30 21:22:57 +08:00
parent 414f0f1efe
commit 2a57961b59
6 changed files with 21 additions and 4 deletions

View File

@ -39,7 +39,7 @@ SFGlobalVariables g_sf_global_vars = {
SF_DEF_MAX_PACKAGE_SIZE, SF_DEF_MIN_BUFF_SIZE,
SF_DEF_MAX_BUFF_SIZE, 0, SF_DEF_THREAD_STACK_SIZE,
0, 0, 0, {'\0'}, {'\0'}, {SF_DEF_SYNC_LOG_BUFF_INTERVAL, false},
{0, 0}
{0, 0}, NULL, {NULL, 0}
};
SFContext g_sf_context = {

View File

@ -54,6 +54,8 @@ typedef struct sf_global_variables {
SFLogConfig error_log;
SFConnectionStat connection_stat;
sf_error_handler_callback error_handler;
string_t empty;
} SFGlobalVariables;
typedef struct sf_context_ini_config {
@ -84,6 +86,9 @@ extern SFContext g_sf_context;
#define SF_G_CONN_CURRENT_COUNT g_sf_global_vars.connection_stat.current_count
#define SF_G_CONN_MAX_COUNT g_sf_global_vars.connection_stat.max_count
#define SF_G_ERROR_HANDLER g_sf_global_vars.error_handler
#define SF_G_EMPTY_STRING g_sf_global_vars.empty
#define SF_WORK_THREADS(sf_context) sf_context.work_threads
#define SF_ALIVE_THREAD_COUNT(sf_context) sf_context.thread_count
#define SF_THREAD_INDEX(sf_context, tdata) (int)(tdata - sf_context.thread_data)
@ -207,6 +212,12 @@ static inline void sf_set_global_base_path(const char *base_path)
SF_G_BASE_PATH_INITED = true;
}
static inline void sf_set_error_handler(
sf_error_handler_callback error_handler)
{
SF_G_ERROR_HANDLER = error_handler;
}
#ifdef __cplusplus
}
#endif

View File

@ -103,7 +103,7 @@
if (client_ctx->auth.enabled) { \
out_bytes += FCFS_AUTH_SESSION_ID_LEN; \
memcpy(the_req_start, client_ctx->auth.ctx-> \
session_id, FCFS_AUTH_SESSION_ID_LEN); \
session.id, FCFS_AUTH_SESSION_ID_LEN); \
the_req_start += FCFS_AUTH_SESSION_ID_LEN; \
} \
if (the_req_id > 0) { \

View File

@ -43,6 +43,8 @@ typedef int (*sf_recv_timeout_callback)(struct fast_task_info *task);
/* calback for release iovec buffer */
typedef void (*sf_release_buffer_callback)(struct fast_task_info *task);
typedef int (*sf_error_handler_callback)(const int errnum);
typedef struct sf_context {
char name[64];
struct nio_thread_data *thread_data;

View File

@ -22,7 +22,6 @@
#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include "sf_global.h"
#include "sf_define.h"
#include "sf_util.h"

View File

@ -23,6 +23,7 @@
#include "fastcommon/sched_thread.h"
#include "sf_define.h"
#include "sf_types.h"
#include "sf_global.h"
#ifdef DEBUG_FLAG /*only for format check*/
@ -127,8 +128,12 @@ static inline int sf_unify_errno(const int errnum)
}
}
static inline int sf_localize_errno(const int errnum)
static inline int sf_localize_errno(int errnum)
{
if (SF_G_ERROR_HANDLER != NULL) {
errnum = SF_G_ERROR_HANDLER(errnum);
}
switch (errnum) {
case SF_ERROR_EBUSY:
return EBUSY;