From bb1e454769c35855af957e3a80214944cf3fb1ba Mon Sep 17 00:00:00 2001 From: "aleksei.voronin" <aleksei.voronin@demlabs.net> Date: Sun, 19 Jul 2020 21:01:57 +0300 Subject: [PATCH] [*] attempt to fix node crash on client disconnect --- dap-sdk/net/server-udp/dap_udp_server.c | 2 ++ dap-sdk/net/stream/ch/dap_stream_ch.c | 6 +++--- modules/service/vpn/dap_chain_net_srv_vpn.c | 10 +++++----- modules/service/vpn/dap_chain_net_vpn_client.c | 6 +++--- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/dap-sdk/net/server-udp/dap_udp_server.c b/dap-sdk/net/server-udp/dap_udp_server.c index 280a6746f4..e75b837c4e 100644 --- a/dap-sdk/net/server-udp/dap_udp_server.c +++ b/dap-sdk/net/server-udp/dap_udp_server.c @@ -348,6 +348,8 @@ void dap_udp_server_loop( dap_server_t *d_server ) struct epoll_event pev; struct epoll_event events[ 16 ]; + memset(&pev, 0, sizeof (pev)); + pev.events = EPOLLIN | EPOLLERR; pev.data.fd = d_server->socket_listener; diff --git a/dap-sdk/net/stream/ch/dap_stream_ch.c b/dap-sdk/net/stream/ch/dap_stream_ch.c index 6ce73a49d4..417204c08e 100644 --- a/dap-sdk/net/stream/ch/dap_stream_ch.c +++ b/dap-sdk/net/stream/ch/dap_stream_ch.c @@ -120,7 +120,7 @@ bool dap_stream_ch_valid(dap_stream_ch_t *a_ch) if(!a_ch) return false; pthread_mutex_lock(&s_ch_table_lock); - HASH_FIND_PTR(s_ch_table, a_ch, l_ret); + HASH_FIND_PTR(s_ch_table, &a_ch, l_ret); pthread_mutex_unlock(&s_ch_table_lock); return l_ret; } @@ -132,8 +132,8 @@ bool dap_stream_ch_valid(dap_stream_ch_t *a_ch) void dap_stream_ch_delete(dap_stream_ch_t *a_ch) { pthread_mutex_lock(&s_ch_table_lock); - struct dap_stream_ch_table_t *l_ret;; - HASH_FIND_PTR(s_ch_table, a_ch, l_ret); + struct dap_stream_ch_table_t *l_ret; + HASH_FIND_PTR(s_ch_table, &a_ch, l_ret); HASH_DEL(s_ch_table, l_ret); pthread_mutex_unlock(&s_ch_table_lock); diff --git a/modules/service/vpn/dap_chain_net_srv_vpn.c b/modules/service/vpn/dap_chain_net_srv_vpn.c index 10db028050..2f92c76950 100644 --- a/modules/service/vpn/dap_chain_net_srv_vpn.c +++ b/modules/service/vpn/dap_chain_net_srv_vpn.c @@ -1139,7 +1139,7 @@ void s_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) HASH_DELETE(hh2, sf_socks, sf_sock); HASH_DELETE(hh_sock, sf_socks_client, sf_sock); - struct epoll_event ev; + struct epoll_event ev = {0, {0}}; ev.data.fd = sf_sock->sock; ev.events = EPOLLIN; if(epoll_ctl(sf_socks_epoll_fd, EPOLL_CTL_DEL, sf_sock->sock, &ev) < 0) { @@ -1170,7 +1170,7 @@ void s_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) pthread_mutex_lock(&s_sf_socks_mutex); HASH_DELETE(hh2, sf_socks, sf_sock); HASH_DELETE(hh_sock, sf_socks_client, sf_sock); - struct epoll_event ev; + struct epoll_event ev = {0, {0}};; ev.data.fd = sf_sock->sock; ev.events = EPOLLIN; if(epoll_ctl(sf_socks_epoll_fd, EPOLL_CTL_DEL, sf_sock->sock, &ev) < 0) { @@ -1244,7 +1244,7 @@ void s_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) pthread_mutex_unlock(&s_sf_socks_mutex); pthread_mutex_unlock(&( CH_VPN(a_ch)->mutex)); - struct epoll_event ev; + struct epoll_event ev = {0, {0}}; ev.data.fd = s; ev.events = EPOLLIN | EPOLLERR; @@ -1380,7 +1380,7 @@ static void s_ch_packet_out(dap_stream_ch_t* a_ch, void* a_arg) */ void srv_stream_sf_disconnect(ch_vpn_socket_proxy_t * sf_sock) { - struct epoll_event ev; + struct epoll_event ev = {0, {0}}; ev.data.fd = sf_sock->sock; ev.events = EPOLLIN | EPOLLERR; if(epoll_ctl(sf_socks_epoll_fd, EPOLL_CTL_DEL, sf_sock->sock, &ev) == -1) { @@ -1409,7 +1409,7 @@ void srv_stream_sf_disconnect(ch_vpn_socket_proxy_t * sf_sock) void * srv_ch_sf_thread(void * a_arg) { UNUSED(a_arg); - struct epoll_event ev, events[SF_MAX_EVENTS] = { 0 }; + struct epoll_event ev = {0, {0}}, events[SF_MAX_EVENTS] = { {0, {0}} }; //pthread_mutex_lock(&sf_socks_mutex); sf_socks_epoll_fd = epoll_create(SF_MAX_EVENTS); sigset_t sf_sigmask; diff --git a/modules/service/vpn/dap_chain_net_vpn_client.c b/modules/service/vpn/dap_chain_net_vpn_client.c index 9109e9320c..ef7b2d77df 100644 --- a/modules/service/vpn/dap_chain_net_vpn_client.c +++ b/modules/service/vpn/dap_chain_net_vpn_client.c @@ -492,7 +492,7 @@ void dap_chain_net_vpn_client_pkt_in(dap_stream_ch_t* a_ch, dap_stream_ch_pkt_t* HASH_DELETE(hh2, sf_socks, sf_sock); HASH_DELETE(hh_sock, sf_socks_client, sf_sock); - struct epoll_event ev; + struct epoll_event ev = {0, {0}}; ev.data.fd = sf_sock->sock; ev.events = EPOLLIN; if(epoll_ctl(sf_socks_epoll_fd, EPOLL_CTL_DEL, sf_sock->sock, &ev) < 0) { @@ -525,7 +525,7 @@ void dap_chain_net_vpn_client_pkt_in(dap_stream_ch_t* a_ch, dap_stream_ch_pkt_t* HASH_DELETE(hh2, sf_socks, sf_sock); HASH_DELETE(hh_sock, sf_socks_client, sf_sock); - struct epoll_event ev; + struct epoll_event ev = {0, {0}}; ev.data.fd = sf_sock->sock; ev.events = EPOLLIN; if(epoll_ctl(sf_socks_epoll_fd, EPOLL_CTL_DEL, sf_sock->sock, &ev) < 0) { @@ -612,7 +612,7 @@ void dap_chain_net_vpn_client_pkt_in(dap_stream_ch_t* a_ch, dap_stream_ch_pkt_t* pthread_mutex_unlock(&( CH_VPN(a_ch)->mutex)); pthread_mutex_unlock(&sf_socks_mutex); - struct epoll_event ev; + struct epoll_event ev = { 0, {0} }; ev.data.fd = s; ev.events = EPOLLIN | EPOLLERR; -- GitLab