void mono_thread_pool_cleanup (void) { if (InterlockedExchange (&async_io_tp.pool_status, 2) == 1) { socket_io_cleanup (&socket_io_data); /* Empty when DISABLE_SOCKETS is defined */ threadpool_kill_idle_threads (&async_io_tp); } if (async_io_tp.queue != NULL) { MONO_SEM_DESTROY (&async_io_tp.new_job); threadpool_free_queue (&async_io_tp); } if (InterlockedExchange (&async_tp.pool_status, 2) == 1) { threadpool_kill_idle_threads (&async_tp); threadpool_free_queue (&async_tp); } if (wsqs) { EnterCriticalSection (&wsqs_lock); mono_wsq_cleanup (); if (wsqs) g_ptr_array_free (wsqs, TRUE); wsqs = NULL; LeaveCriticalSection (&wsqs_lock); MONO_SEM_DESTROY (&async_tp.new_job); } }
void mono_thread_pool_cleanup (void) { if (InterlockedExchange (&async_io_tp.pool_status, 2) == 1) { socket_io_cleanup (&socket_io_data); /* Empty when DISABLE_SOCKETS is defined */ threadpool_kill_idle_threads (&async_io_tp); } if (async_io_tp.queue != NULL) { MONO_SEM_DESTROY (&async_io_tp.new_job); threadpool_free_queue (&async_io_tp); } if (InterlockedExchange (&async_tp.pool_status, 2) == 1) { threadpool_kill_idle_threads (&async_tp); threadpool_free_queue (&async_tp); } if (threads) { mono_mutex_lock (&threads_lock); if (threads) g_ptr_array_free (threads, FALSE); threads = NULL; mono_mutex_unlock (&threads_lock); } if (wsqs) { mono_mutex_lock (&wsqs_lock); mono_wsq_cleanup (); if (wsqs) g_ptr_array_free (wsqs, TRUE); wsqs = NULL; mono_mutex_unlock (&wsqs_lock); MONO_SEM_DESTROY (&async_tp.new_job); } MONO_SEM_DESTROY (&monitor_sem); }