diff --git a/src/dap_events.c b/src/dap_events.c index a2b77eda2071900fd28d201b858e4475369eb075..c64f265b97740008f8125de3f54781dc9fc52392 100755 --- a/src/dap_events.c +++ b/src/dap_events.c @@ -66,6 +66,7 @@ #include <sched.h> #include "dap_common.h" +#include "dap_strfuncs.h" #include "dap_server.h" #include "dap_events.h" @@ -83,6 +84,7 @@ static uint32_t s_threads_count = 1; static size_t s_connection_timeout = 6000; static struct epoll_event *g_epoll_events = NULL; +bool s_workers_init = false; dap_worker_t *s_workers = NULL; dap_thread_t *s_threads = NULL; @@ -139,6 +141,7 @@ int32_t dap_events_init( uint32_t a_threads_count, size_t conn_timeout ) log_it( L_CRITICAL, "Can't init client submodule dap_events_socket_init( )" ); goto err; } + s_workers_init = true; log_it( L_NOTICE, "Initialized socket server module" ); @@ -462,7 +465,14 @@ static void *thread_worker_function(void *arg) */ dap_worker_t *dap_worker_get_min( ) { - return &s_workers[dap_worker_get_index_min()]; + // wait for s_workers init + while(!s_workers_init) + dap_usleep(DAP_USEC_PER_SEC / 1000); + dap_worker_t *l_workers = &s_workers[dap_worker_get_index_min()]; + // wait for worker start + while(!l_workers->events) + dap_usleep(DAP_USEC_PER_SEC / 1000); + return l_workers; } /**