diff --git a/dap-sdk/net/client/dap_client_http.c b/dap-sdk/net/client/dap_client_http.c index 4b2bb2d16a86c6141fce289e24b262f041326c9f..60197e994f8d402a2421aa92d65849096cc05801 100644 --- a/dap-sdk/net/client/dap_client_http.c +++ b/dap-sdk/net/client/dap_client_http.c @@ -123,6 +123,10 @@ static bool s_timer_timeout_check(void * a_arg) assert(l_worker); if(dap_events_socket_check_unsafe(l_worker, l_es) ){ + if ((l_es->type != DESCRIPTOR_TYPE_SOCKET_CLIENT) && (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 2d7366689cf8b9363f472137d98a1cc04309e7ab..4ba149f4ed35b22376fb750e11d2ce3acb5b43ec 100644 --- a/dap-sdk/net/core/dap_events_socket.c +++ b/dap-sdk/net/core/dap_events_socket.c @@ -1466,7 +1466,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