From 46e50ef85a71da6a36a9838ea0e6e05ee1205a12 Mon Sep 17 00:00:00 2001 From: "Dmitriy A. Gerasimov" <dmitriy.gerasimov@demlabs.net> Date: Fri, 13 Nov 2020 01:55:21 +0700 Subject: [PATCH] [!] Returned throwing esocket between reactor and processor --- .../net/server/http_server/dap_http_simple.c | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/dap-sdk/net/server/http_server/dap_http_simple.c b/dap-sdk/net/server/http_server/dap_http_simple.c index b1c0266cf4..bc552abbb4 100644 --- a/dap-sdk/net/server/http_server/dap_http_simple.c +++ b/dap-sdk/net/server/http_server/dap_http_simple.c @@ -225,11 +225,12 @@ inline static bool _is_supported_user_agents_list_setted() return cnt; } -inline static void _set_only_write_http_client_state(dap_http_simple_t * a_simple) +inline static void s_set_writable_flags(dap_http_simple_t * a_simple) { -// log_it(L_DEBUG,"_set_only_write_http_client_state"); - a_simple->http_client->state_write=DAP_HTTP_CLIENT_STATE_START; - dap_events_socket_set_writable_mt(a_simple->worker, a_simple->http_client->esocket,true); + // log_it(L_DEBUG,"_set_only_write_http_client_state"); + a_simple->http_client->state_write=DAP_HTTP_CLIENT_STATE_START; + dap_events_socket_set_writable_unsafe( a_simple->http_client->esocket,true); + } static void _copy_reply_and_mime_to_response( dap_http_simple_t *a_simple ) @@ -289,7 +290,8 @@ bool s_proc_queue_callback(dap_proc_thread_t * a_thread, void * a_arg ) if(header == NULL && is_unknown_user_agents_pass == false) { const char error_msg[] = "Not found User-Agent HTTP header"; _write_response_bad_request(l_http_simple, error_msg); - _set_only_write_http_client_state( l_http_simple); + s_set_writable_flags( l_http_simple); + dap_proc_thread_assign_on_worker_inter(a_thread, l_http_simple->worker, l_http_simple->esocket); return true; } @@ -297,7 +299,8 @@ bool s_proc_queue_callback(dap_proc_thread_t * a_thread, void * a_arg ) log_it(L_DEBUG, "Not supported user agent in request: %s", header->value); const char* error_msg = "User-Agent version not supported. Update your software"; _write_response_bad_request(l_http_simple, error_msg); - _set_only_write_http_client_state( l_http_simple); + s_set_writable_flags( l_http_simple); + dap_proc_thread_assign_on_worker_inter(a_thread, l_http_simple->worker, l_http_simple->esocket); return true; } } @@ -313,7 +316,8 @@ bool s_proc_queue_callback(dap_proc_thread_t * a_thread, void * a_arg ) l_http_simple->http_client->reply_status_code = Http_Status_InternalServerError; } - _set_only_write_http_client_state( l_http_simple); + s_set_writable_flags( l_http_simple); + dap_proc_thread_assign_on_worker_inter(a_thread, l_http_simple->worker, l_http_simple->esocket); return true; } @@ -348,7 +352,7 @@ static void s_http_client_headers_read( dap_http_client_t *a_http_client, void * log_it(L_ERROR, "Not defined content-length %u in request", a_http_client->in_content_length); } else { log_it( L_DEBUG, "No data section, execution proc callback" ); - dap_events_socket_set_writable_unsafe(a_http_client->esocket,false); + dap_events_socket_remove_from_worker_unsafe(l_http_simple->esocket ,l_http_simple->worker); dap_proc_queue_add_callback_inter( l_http_simple->worker->proc_queue_input, s_proc_queue_callback, l_http_simple); } -- GitLab