From 7973a31f01ee51a787848eaa5b064e1037e28b46 Mon Sep 17 00:00:00 2001 From: mom040267 Date: Wed, 15 Oct 2014 06:44:53 +0000 Subject: [PATCH] more debug information --- src/apps/common/ns_turn_utils.c | 42 ++++++++++++------ src/apps/relay/dtls_listener.c | 8 ++-- src/apps/relay/ns_ioalib_engine_impl.c | 61 ++++++++------------------ src/apps/relay/turncli.c | 8 +--- src/apps/uclient/startuclient.c | 7 ++- src/apps/uclient/uclient.c | 12 ++--- src/ns_turn_defs.h | 21 ++++++--- 7 files changed, 77 insertions(+), 82 deletions(-) diff --git a/src/apps/common/ns_turn_utils.c b/src/apps/common/ns_turn_utils.c index ae96519f..ddc937a4 100644 --- a/src/apps/common/ns_turn_utils.c +++ b/src/apps/common/ns_turn_utils.c @@ -747,11 +747,27 @@ static void del_tm_ptr(void *ptr, const char *id) { pthread_mutex_unlock(&tm); } -static void tm_id(char *id, const char* file, int line) { - sprintf(id,"%s:%d",file,line); +static void tm_id(char *id, const char* function, int line) { + sprintf(id,"%s:%d",function,line); } -#define TM_START() char id[128];tm_id(id,file,line);tm_init() +#define TM_START() char id[128];tm_id(id,function,line);tm_init() + +extern "C" void* debug_ptr_add_func(void *ptr, const char* function, int line) { + + TM_START(); + + add_tm_ptr(ptr,id); + + return ptr; +} + +extern "C" void debug_ptr_del_func(void *ptr, const char* function, int line) { + + TM_START(); + + del_tm_ptr(ptr,id); +} extern "C" void tm_print_func(void); void tm_print_func(void) { @@ -765,8 +781,8 @@ void tm_print_func(void) { pthread_mutex_unlock(&tm); } -extern "C" void *turn_malloc_func(size_t sz, const char* file, int line); -void *turn_malloc_func(size_t sz, const char* file, int line) { +extern "C" void *turn_malloc_func(size_t sz, const char* function, int line); +void *turn_malloc_func(size_t sz, const char* function, int line) { TM_START(); @@ -777,8 +793,8 @@ void *turn_malloc_func(size_t sz, const char* file, int line) { return ptr; } -extern "C" void *turn_realloc_func(void *ptr, size_t old_sz, size_t new_sz, const char* file, int line); -void *turn_realloc_func(void *ptr, size_t old_sz, size_t new_sz, const char* file, int line) { +extern "C" void *turn_realloc_func(void *ptr, size_t old_sz, size_t new_sz, const char* function, int line); +void *turn_realloc_func(void *ptr, size_t old_sz, size_t new_sz, const char* function, int line) { UNUSED_ARG(old_sz); @@ -794,8 +810,8 @@ void *turn_realloc_func(void *ptr, size_t old_sz, size_t new_sz, const char* fil return ptr; } -extern "C" void turn_free_func(void *ptr, size_t sz, const char* file, int line); -void turn_free_func(void *ptr, size_t sz, const char* file, int line) { +extern "C" void turn_free_func(void *ptr, size_t sz, const char* function, int line); +void turn_free_func(void *ptr, size_t sz, const char* function, int line) { UNUSED_ARG(sz); @@ -816,8 +832,8 @@ void turn_free_simple(void *ptr) { free(ptr); } -extern "C" void *turn_calloc_func(size_t number, size_t size, const char* file, int line); -void *turn_calloc_func(size_t number, size_t size, const char* file, int line) { +extern "C" void *turn_calloc_func(size_t number, size_t size, const char* function, int line); +void *turn_calloc_func(size_t number, size_t size, const char* function, int line) { TM_START(); @@ -828,8 +844,8 @@ void *turn_calloc_func(size_t number, size_t size, const char* file, int line) { return ptr; } -extern "C" char *turn_strdup_func(const char* s, const char* file, int line); -char *turn_strdup_func(const char* s, const char* file, int line) { +extern "C" char *turn_strdup_func(const char* s, const char* function, int line); +char *turn_strdup_func(const char* s, const char* function, int line) { TM_START(); diff --git a/src/apps/relay/dtls_listener.c b/src/apps/relay/dtls_listener.c index a68aad0e..f6847ec3 100644 --- a/src/apps/relay/dtls_listener.c +++ b/src/apps/relay/dtls_listener.c @@ -266,7 +266,7 @@ static ioa_socket_handle dtls_server_input_handler(dtls_listener_relay_server_ty timeout.tv_usec = 0; BIO_ctrl(wbio, BIO_CTRL_DGRAM_SET_RECV_TIMEOUT, 0, &timeout); - connecting_ssl = SSL_new(server->dtls_ctx); + connecting_ssl = SSL_NEW(server->dtls_ctx); SSL_set_accept_state(connecting_ssl); @@ -285,7 +285,7 @@ static ioa_socket_handle dtls_server_input_handler(dtls_listener_relay_server_ty SSL_set_shutdown(connecting_ssl, SSL_RECEIVED_SHUTDOWN); SSL_shutdown(connecting_ssl); } - SSL_free(connecting_ssl); + SSL_FREE(connecting_ssl); } return rc; @@ -536,7 +536,7 @@ static int create_new_connected_udp_socket( timeout.tv_usec = 0; BIO_ctrl(wbio, BIO_CTRL_DGRAM_SET_RECV_TIMEOUT, 0, &timeout); - connecting_ssl = SSL_new(server->dtls_ctx); + connecting_ssl = SSL_NEW(server->dtls_ctx); SSL_set_accept_state(connecting_ssl); @@ -552,7 +552,7 @@ static int create_new_connected_udp_socket( SSL_set_shutdown(connecting_ssl, SSL_RECEIVED_SHUTDOWN); SSL_shutdown(connecting_ssl); } - SSL_free(connecting_ssl); + SSL_FREE(connecting_ssl); IOA_CLOSE_SOCKET(ret); return -1; } diff --git a/src/apps/relay/ns_ioalib_engine_impl.c b/src/apps/relay/ns_ioalib_engine_impl.c index c42a5e00..66f12804 100644 --- a/src/apps/relay/ns_ioalib_engine_impl.c +++ b/src/apps/relay/ns_ioalib_engine_impl.c @@ -1305,11 +1305,7 @@ static void connect_eventcb(struct bufferevent *bev, short events, void *ptr) if (events & BEV_EVENT_CONNECTED) { ret->conn_cb = NULL; ret->conn_arg = NULL; - if(ret->conn_bev) { - bufferevent_disable(ret->conn_bev,EV_READ|EV_WRITE); - bufferevent_free(ret->conn_bev); - ret->conn_bev=NULL; - } + BUFFEREVENT_FREE(ret->conn_bev); ret->connected = 1; if(cb) { cb(1,arg); @@ -1318,11 +1314,7 @@ static void connect_eventcb(struct bufferevent *bev, short events, void *ptr) /* An error occured while connecting. */ ret->conn_cb = NULL; ret->conn_arg = NULL; - if(ret->conn_bev) { - bufferevent_disable(ret->conn_bev,EV_READ|EV_WRITE); - bufferevent_free(ret->conn_bev); - ret->conn_bev=NULL; - } + BUFFEREVENT_FREE(ret->conn_bev); if(cb) { cb(0,arg); } @@ -1364,15 +1356,12 @@ ioa_socket_handle ioa_create_connecting_tcp_relay_socket(ioa_socket_handle s, io set_ioa_socket_session(ret, s->session); - if(ret->conn_bev) { - bufferevent_disable(ret->conn_bev,EV_READ|EV_WRITE); - bufferevent_free(ret->conn_bev); - ret->conn_bev=NULL; - } + BUFFEREVENT_FREE(ret->conn_bev); ret->conn_bev = bufferevent_socket_new(ret->e->event_base, ret->fd, BEV_OPT_THREADSAFE | BEV_OPT_DEFER_CALLBACKS | BEV_OPT_UNLOCK_CALLBACKS); + debug_ptr_add(ret->conn_bev); bufferevent_setcb(ret->conn_bev, NULL, NULL, connect_eventcb, ret); ret->conn_arg = arg; @@ -1577,16 +1566,8 @@ static void close_socket_net_data(ioa_socket_handle s) evconnlistener_free(s->list_ev); s->list_ev = NULL; } - if(s->conn_bev) { - bufferevent_disable(s->conn_bev,EV_READ|EV_WRITE); - bufferevent_free(s->conn_bev); - s->conn_bev=NULL; - } - if(s->bev) { - bufferevent_disable(s->bev,EV_READ|EV_WRITE); - bufferevent_free(s->bev); - s->bev=NULL; - } + BUFFEREVENT_FREE(s->conn_bev); + BUFFEREVENT_FREE(s->bev); if (s->ssl) { if (!s->broken) { @@ -1607,8 +1588,7 @@ static void close_socket_net_data(ioa_socket_handle s) log_socket_event(s, "SSL shutdown received, socket to be closed",0); } } - SSL_free(s->ssl); - s->ssl = NULL; + SSL_FREE(s->ssl); } if (s->fd >= 0) { @@ -1630,18 +1610,10 @@ void detach_socket_net_data(ioa_socket_handle s) } s->acb = NULL; s->acbarg = NULL; - if(s->conn_bev) { - bufferevent_disable(s->conn_bev,EV_READ|EV_WRITE); - bufferevent_free(s->conn_bev); - s->conn_bev=NULL; - } + BUFFEREVENT_FREE(s->conn_bev); s->conn_arg=NULL; s->conn_cb=NULL; - if(s->bev) { - bufferevent_disable(s->bev,EV_READ|EV_WRITE); - bufferevent_free(s->bev); - s->bev=NULL; - } + BUFFEREVENT_FREE(s->bev); } } @@ -2382,7 +2354,7 @@ static int socket_input_worker(ioa_socket_handle s) #if defined(SSL_TXT_TLSV1_2) case TURN_TLS_v1_2: if(s->e->tls_ctx_v1_2) { - set_socket_ssl(s,SSL_new(s->e->tls_ctx_v1_2)); + set_socket_ssl(s,SSL_NEW(s->e->tls_ctx_v1_2)); STRCPY(s->orig_ctx_type,"TLSv1.2"); } break; @@ -2390,20 +2362,20 @@ static int socket_input_worker(ioa_socket_handle s) #if defined(SSL_TXT_TLSV1_1) case TURN_TLS_v1_1: if(s->e->tls_ctx_v1_1) { - set_socket_ssl(s,SSL_new(s->e->tls_ctx_v1_1)); + set_socket_ssl(s,SSL_NEW(s->e->tls_ctx_v1_1)); STRCPY(s->orig_ctx_type,"TLSv1.1"); } break; #endif case TURN_TLS_v1_0: if(s->e->tls_ctx_v1_0) { - set_socket_ssl(s,SSL_new(s->e->tls_ctx_v1_0)); + set_socket_ssl(s,SSL_NEW(s->e->tls_ctx_v1_0)); STRCPY(s->orig_ctx_type,"TLSv1.0"); } break; default: if(s->e->tls_ctx_ssl23) { - set_socket_ssl(s,SSL_new(s->e->tls_ctx_ssl23)); + set_socket_ssl(s,SSL_NEW(s->e->tls_ctx_ssl23)); STRCPY(s->orig_ctx_type,"SSLv23"); } else { s->tobeclosed = 1; @@ -2416,6 +2388,7 @@ static int socket_input_worker(ioa_socket_handle s) s->ssl, BUFFEREVENT_SSL_ACCEPTING, BEV_OPT_THREADSAFE | BEV_OPT_DEFER_CALLBACKS | BEV_OPT_UNLOCK_CALLBACKS); + debug_ptr_add(s->bev); bufferevent_setcb(s->bev, socket_input_handler_bev, socket_output_handler_bev, eventcb_bev, s); bufferevent_setwatermark(s->bev, EV_READ|EV_WRITE, 0, BUFFEREVENT_HIGH_WATERMARK); @@ -2431,6 +2404,7 @@ static int socket_input_worker(ioa_socket_handle s) s->bev = bufferevent_socket_new(s->e->event_base, s->fd, BEV_OPT_THREADSAFE | BEV_OPT_DEFER_CALLBACKS | BEV_OPT_UNLOCK_CALLBACKS); + debug_ptr_add(s->bev); bufferevent_setcb(s->bev, socket_input_handler_bev, socket_output_handler_bev, eventcb_bev, s); bufferevent_setwatermark(s->bev, EV_READ|EV_WRITE, 0, BUFFEREVENT_HIGH_WATERMARK); @@ -3255,6 +3229,7 @@ int register_callback_on_ioa_socket(ioa_engine_handle e, ioa_socket_handle s, in s->bev = bufferevent_socket_new(s->e->event_base, s->fd, BEV_OPT_THREADSAFE | BEV_OPT_DEFER_CALLBACKS | BEV_OPT_UNLOCK_CALLBACKS); + debug_ptr_add(s->bev); bufferevent_setcb(s->bev, socket_input_handler_bev, socket_output_handler_bev, eventcb_bev, s); bufferevent_setwatermark(s->bev, EV_READ|EV_WRITE, 0, BUFFEREVENT_HIGH_WATERMARK); @@ -3272,19 +3247,21 @@ int register_callback_on_ioa_socket(ioa_engine_handle e, ioa_socket_handle s, in #if !defined(TURN_NO_TLS) if(!(s->ssl)) { //??? how we can get to this point ??? - set_socket_ssl(s,SSL_new(e->tls_ctx_ssl23)); + set_socket_ssl(s,SSL_NEW(e->tls_ctx_ssl23)); STRCPY(s->orig_ctx_type,"SSLv23"); s->bev = bufferevent_openssl_socket_new(s->e->event_base, s->fd, s->ssl, BUFFEREVENT_SSL_ACCEPTING, BEV_OPT_THREADSAFE | BEV_OPT_DEFER_CALLBACKS | BEV_OPT_UNLOCK_CALLBACKS); + debug_ptr_add(s->bev); } else { s->bev = bufferevent_openssl_socket_new(s->e->event_base, s->fd, s->ssl, BUFFEREVENT_SSL_OPEN, BEV_OPT_THREADSAFE | BEV_OPT_DEFER_CALLBACKS | BEV_OPT_UNLOCK_CALLBACKS); + debug_ptr_add(s->bev); } bufferevent_setcb(s->bev, socket_input_handler_bev, socket_output_handler_bev, eventcb_bev, s); diff --git a/src/apps/relay/turncli.c b/src/apps/relay/turncli.c index a2656e6b..f7ac8026 100644 --- a/src/apps/relay/turncli.c +++ b/src/apps/relay/turncli.c @@ -882,12 +882,7 @@ static void close_cli_session(struct cli_session* cs) cs->ts = NULL; } - if(cs->bev) { - bufferevent_flush(cs->bev,EV_READ|EV_WRITE,BEV_FLUSH); - bufferevent_disable(cs->bev,EV_READ|EV_WRITE); - bufferevent_free(cs->bev); - cs->bev=NULL; - } + BUFFEREVENT_FREE(cs->bev); if(cs->fd>=0) { close(cs->fd); @@ -1175,6 +1170,7 @@ static void cliserver_input_handler(struct evconnlistener *l, evutil_socket_t fd clisession->bev = bufferevent_socket_new(cliserver.event_base, fd, BEV_OPT_THREADSAFE | BEV_OPT_DEFER_CALLBACKS | BEV_OPT_UNLOCK_CALLBACKS); + debug_ptr_add(clisession->bev); bufferevent_setcb(clisession->bev, cli_socket_input_handler_bev, NULL, cli_eventcb_bev, clisession); bufferevent_setwatermark(clisession->bev, EV_READ|EV_WRITE, 0, BUFFEREVENT_HIGH_WATERMARK); diff --git a/src/apps/uclient/startuclient.c b/src/apps/uclient/startuclient.c index 893def56..c60da2cd 100644 --- a/src/apps/uclient/startuclient.c +++ b/src/apps/uclient/startuclient.c @@ -80,7 +80,7 @@ static SSL* tls_connect(ioa_socket_raw fd, ioa_addr *remote_addr) { int ctxtype = (int)(((unsigned long)random())%root_tls_ctx_num); - SSL *ssl = SSL_new(root_tls_ctx[ctxtype]); + SSL *ssl = SSL_NEW(root_tls_ctx[ctxtype]); if(use_tcp) { SSL_set_fd(ssl, fd); @@ -590,8 +590,7 @@ static int clnet_allocate(int verbose, int close_socket = (int)(random()%2); if(ssl && !close_socket) { SSL_shutdown(ssl); - SSL_free(ssl); - ssl = NULL; + SSL_FREE(ssl); fd = -1; } else if(fd>=0) { close(fd); @@ -615,7 +614,7 @@ static int clnet_allocate(int verbose, if(ssl) { SSL_shutdown(ssl); - SSL_free(ssl); + SSL_FREE(ssl); } else if(fd>=0) { close(fd); } diff --git a/src/apps/uclient/uclient.c b/src/apps/uclient/uclient.c index 0bc2ba9f..d7aa0db5 100644 --- a/src/apps/uclient/uclient.c +++ b/src/apps/uclient/uclient.c @@ -140,8 +140,7 @@ static void uc_delete_session_elem_data(app_ur_session* cdi) { SSL_shutdown(cdi->pinfo.tcp_conn[i]->tcp_data_ssl); } if(cdi->pinfo.tcp_conn[i]->tcp_data_ssl) { - SSL_free(cdi->pinfo.tcp_conn[i]->tcp_data_ssl); - cdi->pinfo.tcp_conn[i]->tcp_data_ssl = NULL; + SSL_FREE(cdi->pinfo.tcp_conn[i]->tcp_data_ssl); } if(cdi->pinfo.tcp_conn[i]->tcp_data_fd>=0) { socket_closesocket(cdi->pinfo.tcp_conn[i]->tcp_data_fd); @@ -165,8 +164,7 @@ static void uc_delete_session_elem_data(app_ur_session* cdi) { } } if(cdi->pinfo.ssl) { - SSL_free(cdi->pinfo.ssl); - cdi->pinfo.ssl = NULL; + SSL_FREE(cdi->pinfo.ssl); } if(cdi->pinfo.fd>=0) { socket_closesocket(cdi->pinfo.fd); @@ -865,8 +863,7 @@ static int start_client(const char *remote_address, int port, clnet_info_rtcp, &chnum_rtcp); if(clnet_info_probe.ssl) { - SSL_free(clnet_info_probe.ssl); - clnet_info_probe.ssl = NULL; + SSL_FREE(clnet_info_probe.ssl); clnet_info_probe.fd = -1; } else if(clnet_info_probe.fd != -1) { socket_closesocket(clnet_info_probe.fd); @@ -971,8 +968,7 @@ static int start_c2c(const char *remote_address, int port, clnet_info2_rtcp, &chnum2_rtcp); if(clnet_info_probe.ssl) { - SSL_free(clnet_info_probe.ssl); - clnet_info_probe.ssl = NULL; + SSL_FREE(clnet_info_probe.ssl); clnet_info_probe.fd = -1; } else if(clnet_info_probe.fd != -1) { socket_closesocket(clnet_info_probe.fd); diff --git a/src/ns_turn_defs.h b/src/ns_turn_defs.h index 3c4f9199..9d357a35 100644 --- a/src/ns_turn_defs.h +++ b/src/ns_turn_defs.h @@ -120,13 +120,17 @@ static inline u64bits _ioa_ntoh64(u64bits v) #define TURN_LOG_FUNC(level, ...) printf (__VA_ARGS__) void tm_print_func(void); - void *turn_malloc_func(size_t sz, const char* file, int line); - void *turn_realloc_func(void *ptr, size_t old_sz, size_t new_sz, const char* file, int line); - void turn_free_func(void *ptr, size_t sz, const char* file, int line); + void *turn_malloc_func(size_t sz, const char* function, int line); + void *turn_realloc_func(void *ptr, size_t old_sz, size_t new_sz, const char* function, int line); + void turn_free_func(void *ptr, size_t sz, const char* function, int line); void turn_free_simple(void *ptr); - void *turn_calloc_func(size_t number, size_t size, const char* file, int line); - char *turn_strdup_func(const char* s, const char* file, int line); + void *turn_calloc_func(size_t number, size_t size, const char* function, int line); + char *turn_strdup_func(const char* s, const char* function, int line); + void* debug_ptr_add_func(void *ptr, const char* function, int line); + void debug_ptr_del_func(void *ptr, const char* function, int line); +#define debug_ptr_add(ptr) debug_ptr_add_func((ptr),__FUNCTION__,__LINE__) +#define debug_ptr_del(ptr) debug_ptr_del_func((ptr),__FUNCTION__,__LINE__) #define tm_print() tm_print_func() #define turn_malloc(sz) turn_malloc_func((size_t)(sz),__FUNCTION__,__LINE__) #define turn_free(ptr,sz) turn_free_func((ptr),(size_t)(sz),__FUNCTION__,__LINE__) @@ -136,6 +140,8 @@ static inline u64bits _ioa_ntoh64(u64bits v) #else +#define debug_ptr_add(ptr) (ptr) +#define debug_ptr_del(ptr) #define tm_print() #define turn_malloc(sz) malloc((size_t)(sz)) #define turn_free(ptr,sz) free((ptr)) @@ -146,6 +152,11 @@ static inline u64bits _ioa_ntoh64(u64bits v) #endif +#define SSL_NEW(ctx) ((SSL*)debug_ptr_add(SSL_new(ctx))) +#define SSL_FREE(ssl) do { debug_ptr_del(ssl); SSL_free(ssl); ssl = NULL; } while(0) + +#define BUFFEREVENT_FREE(be) do { if(be) { debug_ptr_del(be); bufferevent_flush(be,EV_READ|EV_WRITE,BEV_FLUSH); bufferevent_disable(be,EV_READ|EV_WRITE); bufferevent_free(be); be = NULL;} } while(0) + #define turn_time() ((turn_time_t)time(NULL)) typedef int vint;