From 528c373152f4394f84416c6b08a70f3e01552809 Mon Sep 17 00:00:00 2001 From: Rodrigo Kumpera Date: Tue, 14 Apr 2015 11:04:03 -0400 Subject: [PATCH] [threading] Wrap the threads lock with cooperative coode. --- mono/metadata/lock-tracer.h | 3 ++- mono/metadata/threads.c | 20 ++++++++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/mono/metadata/lock-tracer.h b/mono/metadata/lock-tracer.h index 82e29ad5ffa..7c49bf4f597 100644 --- a/mono/metadata/lock-tracer.h +++ b/mono/metadata/lock-tracer.h @@ -19,7 +19,8 @@ typedef enum { AssemblyBindingLock, MarshalLock, ClassesLock, - LoaderGlobalDataLock + LoaderGlobalDataLock, + ThreadsLock, } RuntimeLocks; #ifdef LOCK_TRACER diff --git a/mono/metadata/threads.c b/mono/metadata/threads.c index a4ff67a62ae..14fc722e4ff 100644 --- a/mono/metadata/threads.c +++ b/mono/metadata/threads.c @@ -126,8 +126,8 @@ typedef struct { #define UICULTURES_START_IDX NUM_CACHED_CULTURES /* Controls access to the 'threads' hash table */ -#define mono_threads_lock() mono_mutex_lock (&threads_mutex) -#define mono_threads_unlock() mono_mutex_unlock (&threads_mutex) +static void mono_threads_lock (void); +static void mono_threads_unlock (void); static mono_mutex_t threads_mutex; /* Controls access to context static data */ @@ -228,6 +228,22 @@ static gboolean shutting_down = FALSE; static gint32 managed_thread_id_counter = 0; + +static void +mono_threads_lock (void) +{ + MONO_TRY_BLOCKING + mono_locks_acquire (&threads_mutex, ThreadsLock); + MONO_FINISH_TRY_BLOCKING +} + +static void +mono_threads_unlock (void) +{ + mono_locks_release (&threads_mutex, ThreadsLock); +} + + static guint32 get_next_managed_thread_id (void) { -- 2.11.4.GIT