From: Ludovic Henry Date: Sat, 17 Dec 2016 14:41:36 +0000 (-0500) Subject: [threadpool] Use threadpool->threads instead of threadpool->counters to wait on clean... X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=mono.git;a=commitdiff_plain;h=8cbeea47672e9d872345d869fc4ccd784ad5d8b7 [threadpool] Use threadpool->threads instead of threadpool->counters to wait on cleanup (#4146) --- diff --git a/mono/metadata/threadpool.c b/mono/metadata/threadpool.c index cfe2892b375..07db889f26c 100644 --- a/mono/metadata/threadpool.c +++ b/mono/metadata/threadpool.c @@ -187,17 +187,12 @@ cleanup (void) mono_coop_mutex_lock (&threadpool->threads_lock); for (;;) { - ThreadPoolCounter counter; - - counter = COUNTER_READ (threadpool); - if (counter._.working == 0) + if (threadpool->threads->len == 0) break; - if (counter._.working == 1) { - if (threadpool->threads->len == 1 && g_ptr_array_index (threadpool->threads, 0) == current) { - /* We are waiting on ourselves */ - break; - } + if (threadpool->threads->len == 1 && g_ptr_array_index (threadpool->threads, 0) == current) { + /* We are waiting on ourselves */ + break; } mono_coop_cond_wait (&threadpool->threads_exit_cond, &threadpool->threads_lock); @@ -458,16 +453,16 @@ worker_callback (gpointer unused) mono_coop_mutex_lock (&threadpool->threads_lock); - COUNTER_ATOMIC (threadpool, counter, { - counter._.working --; - }); - g_ptr_array_remove_fast (threadpool->threads, thread); mono_coop_cond_signal (&threadpool->threads_exit_cond); mono_coop_mutex_unlock (&threadpool->threads_lock); + COUNTER_ATOMIC (threadpool, counter, { + counter._.working --; + }); + mono_refcount_dec (threadpool); }