From 8cbeea47672e9d872345d869fc4ccd784ad5d8b7 Mon Sep 17 00:00:00 2001 From: Ludovic Henry Date: Sat, 17 Dec 2016 09:41:36 -0500 Subject: [PATCH] [threadpool] Use threadpool->threads instead of threadpool->counters to wait on cleanup (#4146) --- mono/metadata/threadpool.c | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) 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); } -- 2.25.1