From 4c0b732a0f0d2295707542677cead3313c2a1a0f Mon Sep 17 00:00:00 2001 From: luwenpeng Date: Tue, 10 Aug 2021 15:17:42 +0800 Subject: bugfix: TSG-7333 Proxy使用ssl_stream_log_error打印错误日志时频繁调用asprintf()/free()拼接四元组字符串 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- platform/include/internal/ssl_stream_core.h | 2 +- platform/src/ssl_stream.cpp | 14 ++++++-------- platform/src/tcp_stream.cpp | 2 +- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/platform/include/internal/ssl_stream_core.h b/platform/include/internal/ssl_stream_core.h index e2d1601..ed8afcc 100644 --- a/platform/include/internal/ssl_stream_core.h +++ b/platform/include/internal/ssl_stream_core.h @@ -23,7 +23,7 @@ struct ssl_mgr * ssl_manager_init(const char * ini_profile, const char * section struct key_keeper * key_keeper, void * logger); void ssl_manager_set_new_upstream_cb(struct ssl_mgr * mgr, ssl_stream_new_hook* new_upstream_cb, void* u_para); void ssl_manager_destroy(struct ssl_mgr * mgr); -unsigned long ssl_stream_log_error(struct bufferevent * bev, enum tfe_conn_dir dir, struct ssl_mgr* mgr); +unsigned long ssl_stream_log_error(struct bufferevent * bev, enum tfe_conn_dir dir, struct ssl_mgr* mgr, const char *addr); void ssl_stream_process_error(struct ssl_stream * s_stream, unsigned long sslerr, struct ssl_mgr* mgr); const char* ssl_stream_get_error_string(enum ssl_stream_error error); void ssl_stream_set_cmsg_string(struct ssl_stream *stream, enum tfe_cmsg_tlv_type type, const char *value_str); diff --git a/platform/src/ssl_stream.cpp b/platform/src/ssl_stream.cpp index 865e623..55f3924 100644 --- a/platform/src/ssl_stream.cpp +++ b/platform/src/ssl_stream.cpp @@ -1083,11 +1083,10 @@ static void ssl_stream_set_cmsg_integer(struct ssl_stream* stream, enum tfe_cmsg return; } -unsigned long ssl_stream_log_error(struct bufferevent * bev, enum tfe_conn_dir dir, struct ssl_mgr* mgr) +unsigned long ssl_stream_log_error(struct bufferevent * bev, enum tfe_conn_dir dir, struct ssl_mgr* mgr, const char *addr) { unsigned long sslerr=0, ret_sslerr=0; int fd=bufferevent_getfd(bev); - char* addr_string=tfe_string_addr_create_by_fd(fd, dir); void* logger=mgr->logger; int fs_id=-1; @@ -1134,7 +1133,7 @@ unsigned long ssl_stream_log_error(struct bufferevent * bev, enum tfe_conn_dir d TFE_LOG_ERROR(logger,"Handshake Error from bufferevent of ssl %s %s: " "%i:%s %lu:%i:%s:%i:%s:%i:%s", tfe_stream_conn_dir_to_str(dir), - addr_string, + addr, errno, errno ? strerror(errno) : "-", sslerr, @@ -1168,7 +1167,7 @@ unsigned long ssl_stream_log_error(struct bufferevent * bev, enum tfe_conn_dir d TFE_LOG_ERROR(logger,"Error from bufferevent of ssl %s %s: " "%i:%s %lu:%i:%s:%i:%s:%i:%s", tfe_stream_conn_dir_to_str(dir), - addr_string, + addr, errno, errno ? strerror(errno) : "-", sslerr, @@ -1196,7 +1195,6 @@ unsigned long ssl_stream_log_error(struct bufferevent * bev, enum tfe_conn_dir d ERR_func_error_string(sslerr)); } } - free(addr_string); return ret_sslerr; } void ssl_stream_process_error(struct ssl_stream * s_stream, unsigned long sslerr, struct ssl_mgr* mgr) @@ -1283,7 +1281,7 @@ static void ssl_server_connected_eventcb(struct bufferevent * bev, short events, if (events & BEV_EVENT_ERROR) { ATOMIC_INC(&(ctx->mgr->stat_val[SSL_UP_ERR])); - sslerr=ssl_stream_log_error(bev, CONN_DIR_UPSTREAM, ctx->mgr); + sslerr=ssl_stream_log_error(bev, CONN_DIR_UPSTREAM, ctx->mgr, s_stream->tcp_stream->str_stream_info); if(sslerr) { ssl_stream_process_error(s_stream, sslerr, mgr); @@ -1898,7 +1896,7 @@ static void ssl_client_connected_eventcb(struct bufferevent * bev, short events, if (events & BEV_EVENT_ERROR) { ATOMIC_INC(&(mgr->stat_val[SSL_DOWN_ERR])); - sslerr=ssl_stream_log_error(bev, CONN_DIR_DOWNSTREAM, mgr); + sslerr=ssl_stream_log_error(bev, CONN_DIR_DOWNSTREAM, mgr, s_stream->tcp_stream->str_stream_info); if(sslerr) { ssl_stream_process_error(s_stream, sslerr, mgr); @@ -2046,7 +2044,7 @@ void ssl_stream_free(struct ssl_stream * s_stream, struct event_base * evbase, s if(errno) { - sslerr=ssl_stream_log_error(bev, s_stream->dir, s_stream->mgr); + sslerr=ssl_stream_log_error(bev, s_stream->dir, s_stream->mgr, s_stream->tcp_stream->str_stream_info); if(sslerr) { ssl_stream_process_error(s_stream, sslerr, s_stream->mgr); diff --git a/platform/src/tcp_stream.cpp b/platform/src/tcp_stream.cpp index 92bae92..9335ab1 100644 --- a/platform/src/tcp_stream.cpp +++ b/platform/src/tcp_stream.cpp @@ -826,7 +826,7 @@ static void __stream_bev_eventcb(struct bufferevent * bev, short events, void * { if (_stream->session_type == STREAM_PROTO_SSL) { - unsigned long sslerr = ssl_stream_log_error(bev, __bev_dir(_stream, bev), _stream->ssl_mgr); + unsigned long sslerr = ssl_stream_log_error(bev, __bev_dir(_stream, bev), _stream->ssl_mgr, _stream->str_stream_addr); if (sslerr) { TFE_LOG_ERROR(g_default_logger, "%s %s connection error at tcp layer, ssl layer is unavailable", _stream->str_stream_addr, str_conn_dir); -- cgit v1.2.3