diff --git a/dap-sdk/net/client/dap_client_http.c b/dap-sdk/net/client/dap_client_http.c index f525976e5e37036aa0e1cac691008c47035a8690..9ef3218ccf8da144dfb287d79ac8fe47ef7674aa 100644 --- a/dap-sdk/net/client/dap_client_http.c +++ b/dap-sdk/net/client/dap_client_http.c @@ -119,10 +119,14 @@ static bool s_timer_timeout_check(void * a_arg) dap_events_t * l_events = dap_events_get_default(); assert(l_events); - dap_worker_t * l_worker =(dap_worker_t*) pthread_getspecific(l_events->pth_key_worker);; // We're in own esocket context + dap_worker_t * l_worker =(dap_worker_t*) pthread_getspecific(l_events->pth_key_worker); // We're in own esocket context assert(l_worker); if(dap_events_socket_check_unsafe(l_worker, l_es) ){ + if ((l_es->type != DESCRIPTOR_TYPE_SOCKET) && (l_es->type != DESCRIPTOR_TYPE_SOCKET_UDP)) { + log_it(L_CRITICAL, "Timer esocket wrong argument: socket %d type %d, ignore this timeout...", l_es->socket, l_es->type); + return false; + } dap_client_http_pvt_t * l_http_pvt = PVT(l_es); log_it(L_WARNING,"Connection timeout for request http://%s:%u/%s, possible network problems or host is down", l_http_pvt->uplink_addr, l_http_pvt->uplink_port, l_http_pvt->path); @@ -131,7 +135,11 @@ static bool s_timer_timeout_check(void * a_arg) l_http_pvt->were_callbacks_called = true; } l_http_pvt->is_closed_by_timeout = true; - l_es->flags |= DAP_SOCK_SIGNAL_CLOSE; + log_it(L_INFO, "Close %s sock %u type %d by timeout", + l_es->remote_addr_str ? l_es->remote_addr_str : "", l_es->socket, l_es->type); + dap_events_socket_remove_and_delete_unsafe(l_es, true); + } else { + log_it(L_INFO, "Socket %d type %d already disposed", l_es->socket, l_es->type); } return false; } diff --git a/dap-sdk/net/core/dap_events_socket.c b/dap-sdk/net/core/dap_events_socket.c index c14675dbc12e5dcac487c7938fe3af6ba5cd8ce3..77be1705bd750506f2989dddcad71a5e42deb709 100644 --- a/dap-sdk/net/core/dap_events_socket.c +++ b/dap-sdk/net/core/dap_events_socket.c @@ -1420,7 +1420,7 @@ bool dap_events_socket_check_unsafe(dap_worker_t * a_worker,dap_events_socket_t if ( a_worker->esockets){ dap_events_socket_t * l_es = NULL; pthread_rwlock_rdlock(&a_worker->esocket_rwlock); - HASH_FIND(hh_worker,a_worker->esockets,&a_es, sizeof(a_es), l_es ); + HASH_FIND(hh_worker,a_worker->esockets,&a_es, sizeof(void*), l_es ); pthread_rwlock_unlock(&a_worker->esocket_rwlock); return l_es == a_es; }else