diff options
Diffstat (limited to 'src/web/server/static/static-threaded.c')
-rw-r--r-- | src/web/server/static/static-threaded.c | 63 |
1 files changed, 32 insertions, 31 deletions
diff --git a/src/web/server/static/static-threaded.c b/src/web/server/static/static-threaded.c index f2a07e405..a4b24c9ac 100644 --- a/src/web/server/static/static-threaded.c +++ b/src/web/server/static/static-threaded.c @@ -61,7 +61,7 @@ static struct web_client *web_client_create_on_fd(POLLINFO *pi) { // the main socket listener - STATIC-THREADED struct web_server_static_threaded_worker { - netdata_thread_t thread; + ND_THREAD *thread; int id; int running; @@ -394,8 +394,9 @@ cleanup: // ---------------------------------------------------------------------------- // web server worker thread -static void socket_listen_main_static_threaded_worker_cleanup(void *ptr) { - worker_private = (struct web_server_static_threaded_worker *)ptr; +static void socket_listen_main_static_threaded_worker_cleanup(void *pptr) { + worker_private = CLEANUP_FUNCTION_GET_PTR(pptr); + if(!worker_private) return; netdata_log_info("stopped after %zu connects, %zu disconnects (max concurrent %zu), %zu receptions and %zu sends", worker_private->connected, @@ -414,7 +415,7 @@ static bool web_server_should_stop(void) { } void *socket_listen_main_static_threaded_worker(void *ptr) { - worker_private = (struct web_server_static_threaded_worker *)ptr; + worker_private = ptr; worker_private->running = 1; worker_register("WEB"); worker_register_job_name(WORKER_JOB_ADD_CONNECTION, "connect"); @@ -427,26 +428,24 @@ void *socket_listen_main_static_threaded_worker(void *ptr) { worker_register_job_name(WORKER_JOB_SND_DATA, "send"); worker_register_job_name(WORKER_JOB_PROCESS, "process"); - netdata_thread_cleanup_push(socket_listen_main_static_threaded_worker_cleanup, ptr); - - poll_events(&api_sockets - , web_server_add_callback - , web_server_del_callback - , web_server_rcv_callback - , web_server_snd_callback - , NULL - , web_server_should_stop - , web_allow_connections_from - , web_allow_connections_dns - , NULL - , web_client_first_request_timeout - , web_client_timeout - , default_rrd_update_every * 1000 // timer_milliseconds - , ptr // timer_data - , worker_private->max_sockets - ); - - netdata_thread_cleanup_pop(1); + CLEANUP_FUNCTION_REGISTER(socket_listen_main_static_threaded_worker_cleanup) cleanup_ptr = worker_private; + poll_events(&api_sockets + , web_server_add_callback + , web_server_del_callback + , web_server_rcv_callback + , web_server_snd_callback + , NULL + , web_server_should_stop + , web_allow_connections_from + , web_allow_connections_dns + , NULL + , web_client_first_request_timeout + , web_client_timeout + , default_rrd_update_every * 1000 // timer_milliseconds + , ptr // timer_data + , worker_private->max_sockets + ); + return NULL; } @@ -454,8 +453,10 @@ void *socket_listen_main_static_threaded_worker(void *ptr) { // ---------------------------------------------------------------------------- // web server main thread - also becomes a worker -static void socket_listen_main_static_threaded_cleanup(void *ptr) { - struct netdata_static_thread *static_thread = (struct netdata_static_thread *)ptr; +static void socket_listen_main_static_threaded_cleanup(void *pptr) { + struct netdata_static_thread *static_thread = CLEANUP_FUNCTION_GET_PTR(pptr); + if(!static_thread) return; + static_thread->enabled = NETDATA_MAIN_THREAD_EXITING; // int i, found = 0; @@ -466,7 +467,7 @@ static void socket_listen_main_static_threaded_cleanup(void *ptr) { // if(static_workers_private_data[i].running) { // found++; // netdata_log_info("stopping worker %d", i + 1); -// netdata_thread_cancel(static_workers_private_data[i].thread); +// nd_thread_signal_cancel(static_workers_private_data[i].thread); // } // else // netdata_log_info("found stopped worker %d", i + 1); @@ -496,7 +497,7 @@ static void socket_listen_main_static_threaded_cleanup(void *ptr) { } void *socket_listen_main_static_threaded(void *ptr) { - netdata_thread_cleanup_push(socket_listen_main_static_threaded_cleanup, ptr); + CLEANUP_FUNCTION_REGISTER(socket_listen_main_static_threaded_cleanup) cleanup_ptr = ptr; web_server_mode = WEB_SERVER_MODE_STATIC_THREADED; if(!api_sockets.opened) @@ -548,14 +549,14 @@ void *socket_listen_main_static_threaded(void *ptr) { snprintfz(tag, sizeof(tag) - 1, "WEB[%d]", i+1); netdata_log_info("starting worker %d", i+1); - netdata_thread_create(&static_workers_private_data[i].thread, tag, NETDATA_THREAD_OPTION_DEFAULT, - socket_listen_main_static_threaded_worker, (void *)&static_workers_private_data[i]); + static_workers_private_data[i].thread = nd_thread_create(tag, NETDATA_THREAD_OPTION_DEFAULT, + socket_listen_main_static_threaded_worker, + (void *)&static_workers_private_data[i]); } // and the main one static_workers_private_data[0].max_sockets = max_sockets / static_threaded_workers_count; socket_listen_main_static_threaded_worker((void *)&static_workers_private_data[0]); - netdata_thread_cleanup_pop(1); return NULL; } |