static void
mono_assembly_binding_lock (void)
{
- mono_locks_mutex_acquire (&assembly_binding_mutex, AssemblyBindingLock);
+ mono_locks_os_acquire (&assembly_binding_mutex, AssemblyBindingLock);
}
static void
mono_assembly_binding_unlock (void)
{
- mono_locks_mutex_release (&assembly_binding_mutex, AssemblyBindingLock);
+ mono_locks_os_release (&assembly_binding_mutex, AssemblyBindingLock);
}
gboolean
static inline void
classes_lock (void)
{
- mono_locks_acquire (&classes_mutex, ClassesLock);
+ mono_locks_os_acquire (&classes_mutex, ClassesLock);
}
static inline void
classes_unlock (void)
{
- mono_locks_release (&classes_mutex, ClassesLock);
+ mono_locks_os_release (&classes_mutex, ClassesLock);
}
/*
const AssemblyVersionSet version_sets [4];
} MonoRuntimeInfo;
-#define mono_domain_assemblies_lock(domain) mono_locks_acquire(&(domain)->assemblies_lock, DomainAssembliesLock)
-#define mono_domain_assemblies_unlock(domain) mono_locks_release(&(domain)->assemblies_lock, DomainAssembliesLock)
-#define mono_domain_jit_code_hash_lock(domain) mono_locks_acquire(&(domain)->jit_code_hash_lock, DomainJitCodeHashLock)
-#define mono_domain_jit_code_hash_unlock(domain) mono_locks_release(&(domain)->jit_code_hash_lock, DomainJitCodeHashLock)
+#define mono_domain_assemblies_lock(domain) mono_locks_os_acquire(&(domain)->assemblies_lock, DomainAssembliesLock)
+#define mono_domain_assemblies_unlock(domain) mono_locks_os_release(&(domain)->assemblies_lock, DomainAssembliesLock)
+#define mono_domain_jit_code_hash_lock(domain) mono_locks_os_acquire(&(domain)->jit_code_hash_lock, DomainJitCodeHashLock)
+#define mono_domain_jit_code_hash_unlock(domain) mono_locks_os_release(&(domain)->jit_code_hash_lock, DomainJitCodeHashLock)
typedef MonoDomain* (*MonoLoadFunc) (const char *filename, const char *runtime_version);
mono_domain_lock (MonoDomain *domain)
{
MONO_TRY_BLOCKING;
- mono_locks_acquire (&(domain)->lock, DomainLock);
+ mono_locks_os_acquire (&(domain)->lock, DomainLock);
MONO_FINISH_TRY_BLOCKING;
}
void
mono_domain_unlock (MonoDomain *domain)
{
- mono_locks_release (&(domain)->lock, DomainLock);
+ mono_locks_os_release (&(domain)->lock, DomainLock);
}
static void
mono_icall_lock (void)
{
- mono_locks_mutex_acquire (&icall_mutex, IcallLock);
+ mono_locks_os_acquire (&icall_mutex, IcallLock);
}
static void
mono_icall_unlock (void)
{
- mono_locks_mutex_release (&icall_mutex, IcallLock);
+ mono_locks_os_release (&icall_mutex, IcallLock);
}
void
void
mono_image_lock (MonoImage *image)
{
- mono_locks_acquire (&image->lock, ImageDataLock);
+ mono_locks_os_acquire (&image->lock, ImageDataLock);
}
void
mono_image_unlock (MonoImage *image)
{
- mono_locks_release (&image->lock, ImageDataLock);
+ mono_locks_os_release (&image->lock, ImageDataLock);
}
static void
global_loader_data_lock (void)
{
- mono_locks_acquire (&global_loader_data_mutex, LoaderGlobalDataLock);
+ mono_locks_os_acquire (&global_loader_data_mutex, LoaderGlobalDataLock);
}
static void
global_loader_data_unlock (void)
{
- mono_locks_release (&global_loader_data_mutex, LoaderGlobalDataLock);
+ mono_locks_os_release (&global_loader_data_mutex, LoaderGlobalDataLock);
}
void
mono_loader_lock (void)
{
MONO_TRY_BLOCKING;
- mono_locks_acquire (&loader_mutex, LoaderLock);
+ mono_locks_os_acquire (&loader_mutex, LoaderLock);
MONO_FINISH_TRY_BLOCKING;
if (G_UNLIKELY (loader_lock_track_ownership)) {
void
mono_loader_unlock (void)
{
- mono_locks_release (&loader_mutex, LoaderLock);
+ mono_locks_os_release (&loader_mutex, LoaderLock);
if (G_UNLIKELY (loader_lock_track_ownership)) {
mono_native_tls_set_value (loader_lock_nest_id, GUINT_TO_POINTER (GPOINTER_TO_UINT (mono_native_tls_get_value (loader_lock_nest_id)) - 1));
}
*
* To log more kind of locks just do the following:
* - add an entry into the RuntimeLocks enum
- * - change mono_os_mutex_lock(mutex) to mono_locks_acquire (mutex, LockName)
- * - change mono_os_mutex_unlock(mutex) to mono_locks_release (mutex, LockName)
+ * - change mono_os_mutex_lock(mutex) to mono_locks_os_acquire (mutex, LockName)
+ * - change mono_os_mutex_unlock(mutex) to mono_locks_os_release (mutex, LockName)
+ * - change mono_coop_mutex_lock(mutex) to mono_locks_coop_acquire (mutex, LockName)
+ * - change mono_coop_mutex_unlock(mutex) to mono_locks_coop_release (mutex, LockName)
* - change the decoder to understand the new lock kind.
*
* TODO:
#include <glib.h>
#include "mono/utils/mono-os-mutex.h"
+#include "mono/utils/mono-coop-mutex.h"
G_BEGIN_DECLS
#endif
-#define mono_locks_acquire(LOCK, NAME) do { \
- mono_os_mutex_lock (LOCK); \
- mono_locks_lock_acquired (NAME, LOCK); \
-} while (0)
-
-#define mono_locks_release(LOCK, NAME) do { \
- mono_locks_lock_released (NAME, LOCK); \
- mono_os_mutex_unlock (LOCK); \
-} while (0)
-
-#define mono_locks_mutex_acquire(LOCK, NAME) do { \
- mono_os_mutex_lock (LOCK); \
- mono_locks_lock_acquired (NAME, LOCK); \
-} while (0)
-
-#define mono_locks_mutex_release(LOCK, NAME) do { \
- mono_locks_lock_released (NAME, LOCK); \
- mono_os_mutex_unlock (LOCK); \
-} while (0)
+#define mono_locks_os_acquire(LOCK,NAME) \
+ do { \
+ mono_os_mutex_lock (LOCK); \
+ mono_locks_lock_acquired (NAME, LOCK); \
+ } while (0)
+
+#define mono_locks_os_release(LOCK,NAME) \
+ do { \
+ mono_locks_lock_released (NAME, LOCK); \
+ mono_os_mutex_unlock (LOCK); \
+ } while (0)
+
+#define mono_locks_coop_acquire(LOCK,NAME) \
+ do { \
+ mono_coop_mutex_lock (LOCK); \
+ mono_locks_lock_acquired (NAME, LOCK); \
+ } while (0)
+
+#define mono_locks_coop_release(LOCK,NAME) \
+ do { \
+ mono_locks_lock_released (NAME, LOCK); \
+ mono_coop_mutex_unlock (LOCK); \
+ } while (0)
+
G_END_DECLS
#endif /* __MONO_METADATA_LOCK_TRACER_H__ */
* The marshal lock is a non-recursive complex lock that sits below the domain lock in the
* runtime locking latice. Which means it can take simple locks suck as the image lock.
*/
-#define mono_marshal_lock() mono_locks_acquire (&marshal_mutex, MarshalLock)
-#define mono_marshal_unlock() mono_locks_release (&marshal_mutex, MarshalLock)
+#define mono_marshal_lock() mono_locks_os_acquire (&marshal_mutex, MarshalLock)
+#define mono_marshal_unlock() mono_locks_os_release (&marshal_mutex, MarshalLock)
static mono_mutex_t marshal_mutex;
static gboolean marshal_mutex_initialized;
mono_threads_lock (void)
{
MONO_TRY_BLOCKING;
- mono_locks_acquire (&threads_mutex, ThreadsLock);
+ mono_locks_os_acquire (&threads_mutex, ThreadsLock);
MONO_FINISH_TRY_BLOCKING;
}
static void
mono_threads_unlock (void)
{
- mono_locks_release (&threads_mutex, ThreadsLock);
+ mono_locks_os_release (&threads_mutex, ThreadsLock);
}