projects
/
mono.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
804044e
)
[threadpool] Extract ThreadPoolDomain creation from tpdomain_get
author
Ludovic Henry
<ludovic@xamarin.com>
Mon, 13 Feb 2017 19:19:21 +0000
(14:19 -0500)
committer
Ludovic Henry
<ludovic@xamarin.com>
Thu, 16 Feb 2017 20:36:44 +0000
(15:36 -0500)
mono/metadata/threadpool.c
patch
|
blob
|
history
diff --git
a/mono/metadata/threadpool.c
b/mono/metadata/threadpool.c
index 7f7c31f0631ab5d5bc279212b98d939f369ce43b..4b0aa6ec18d0dbcefea22663c85585c1d3c10a9f 100644
(file)
--- a/
mono/metadata/threadpool.c
+++ b/
mono/metadata/threadpool.c
@@
-243,22
+243,19
@@
mono_threadpool_enqueue_work_item (MonoDomain *domain, MonoObject *work_item, Mo
return TRUE;
}
return TRUE;
}
-/* LOCKING: domains_lock must be held */
-static
void
-tpdomain_
add (ThreadPoolDomain *tp
domain)
+/* LOCKING: domains_lock must be held
.
*/
+static
ThreadPoolDomain *
+tpdomain_
create (MonoDomain *
domain)
{
{
-
guint i, le
n;
+
ThreadPoolDomain *tpdomai
n;
- g_assert (tpdomain);
+ tpdomain = g_new0 (ThreadPoolDomain, 1);
+ tpdomain->domain = domain;
+ mono_coop_cond_init (&tpdomain->cleanup_cond);
- len = threadpool.domains->len;
- for (i = 0; i < len; ++i) {
- if (g_ptr_array_index (threadpool.domains, i) == tpdomain)
- break;
- }
+ g_ptr_array_add (threadpool.domains, tpdomain);
- if (i == len)
- g_ptr_array_add (threadpool.domains, tpdomain);
+ return tpdomain;
}
/* LOCKING: domains_lock must be held. */
}
/* LOCKING: domains_lock must be held. */
@@
-271,10
+268,9
@@
tpdomain_remove (ThreadPoolDomain *tpdomain)
/* LOCKING: domains_lock must be held */
static ThreadPoolDomain *
/* LOCKING: domains_lock must be held */
static ThreadPoolDomain *
-tpdomain_get (MonoDomain *domain
, gboolean create
)
+tpdomain_get (MonoDomain *domain)
{
{
- guint i;
- ThreadPoolDomain *tpdomain;
+ gint i;
g_assert (domain);
g_assert (domain);
@@
-286,16
+282,7
@@
tpdomain_get (MonoDomain *domain, gboolean create)
return tpdomain;
}
return tpdomain;
}
- if (!create)
- return NULL;
-
- tpdomain = g_new0 (ThreadPoolDomain, 1);
- tpdomain->domain = domain;
- mono_coop_cond_init (&tpdomain->cleanup_cond);
-
- tpdomain_add (tpdomain);
-
- return tpdomain;
+ return NULL;
}
static void
}
static void
@@
-619,7
+606,7
@@
mono_threadpool_remove_domain_jobs (MonoDomain *domain, int timeout)
domains_lock ();
domains_lock ();
- tpdomain = tpdomain_get (domain
, FALSE
);
+ tpdomain = tpdomain_get (domain);
if (!tpdomain) {
domains_unlock ();
mono_refcount_dec (&threadpool);
if (!tpdomain) {
domains_unlock ();
mono_refcount_dec (&threadpool);
@@
-803,14
+790,18
@@
ves_icall_System_Threading_ThreadPool_RequestWorkerThread (void)
domains_lock ();
domains_lock ();
- /* synchronize with mono_threadpool_remove_domain_jobs */
- if (mono_domain_is_unloading (domain)) {
- domains_unlock ();
- mono_refcount_dec (&threadpool);
- return FALSE;
+ tpdomain = tpdomain_get (domain);
+ if (!tpdomain) {
+ /* synchronize with mono_threadpool_remove_domain_jobs */
+ if (mono_domain_is_unloading (domain)) {
+ domains_unlock ();
+ mono_refcount_dec (&threadpool);
+ return FALSE;
+ }
+
+ tpdomain = tpdomain_create (domain);
}
}
- tpdomain = tpdomain_get (domain, TRUE);
g_assert (tpdomain);
tpdomain->outstanding_request ++;
g_assert (tpdomain);
tpdomain->outstanding_request ++;