+2010-07-23 Zoltan Varga <vargaz@gmail.com>
+
+ * loader.c (mono_loader_lock_if_inited): New helper function which can be called
+ during startup before the loader lock is initialized.
+ (mono_loader_unlock_if_inited): Ditto.
+
2010-07-21 Geoff Norton <gnorton@novell.com>
* sgen-archdep.h: Fix the build on amd64-darwin.
gboolean
mono_loader_lock_is_owned_by_self (void) MONO_INTERNAL;
+void
+mono_loader_lock_if_inited (void) MONO_INTERNAL;
+
+void
+mono_loader_unlock_if_inited (void) MONO_INTERNAL;
+
void
mono_loader_set_error_assembly_load (const char *assembly_name, gboolean ref_only) MONO_INTERNAL;
* domain lock.
*/
static CRITICAL_SECTION loader_mutex;
+static gboolean loader_lock_inited;
/* Statistics */
static guint32 inflated_signatures_size;
if (!inited) {
InitializeCriticalSection (&loader_mutex);
+ loader_lock_inited = TRUE;
loader_error_thread_id = TlsAlloc ();
loader_lock_nest_id = TlsAlloc ();
TlsFree (loader_lock_nest_id);
/*DeleteCriticalSection (&loader_mutex);*/
+ loader_lock_inited = FALSE;
}
/*
return GPOINTER_TO_UINT (TlsGetValue (loader_lock_nest_id)) > 0;
}
+/*
+ * mono_loader_lock_if_inited:
+ *
+ * Acquire the loader lock if it has been initialized, no-op otherwise. This can
+ * be used in runtime initialization code which can be executed before mono_loader_init ().
+ */
+void
+mono_loader_lock_if_inited (void)
+{
+ if (loader_lock_inited)
+ mono_loader_lock ();
+}
+
+void
+mono_loader_unlock_if_inited (void)
+{
+ if (loader_lock_inited)
+ mono_loader_unlock ();
+}
+
/**
* mono_method_signature:
*