static void
delegate_hash_table_remove (MonoDelegate *d)
{
-#ifdef HAVE_MOVING_COLLECTOR
- guint32 gchandle;
-#endif
+ guint32 gchandle = 0;
+
mono_marshal_lock ();
if (delegate_hash_table == NULL)
delegate_hash_table = delegate_hash_table_new ();
-#ifdef HAVE_MOVING_COLLECTOR
- gchandle = GPOINTER_TO_UINT (g_hash_table_lookup (delegate_hash_table, d->delegate_trampoline));
-#endif
+ if (mono_gc_is_moving ())
+ gchandle = GPOINTER_TO_UINT (g_hash_table_lookup (delegate_hash_table, d->delegate_trampoline));
g_hash_table_remove (delegate_hash_table, d->delegate_trampoline);
mono_marshal_unlock ();
-#ifdef HAVE_MOVING_COLLECTOR
- mono_gchandle_free (gchandle);
-#endif
+ if (mono_gc_is_moving ())
+ mono_gchandle_free (gchandle);
}
static void
delegate_hash_table_add (MonoDelegate *d)
{
-#ifdef HAVE_MOVING_COLLECTOR
- guint32 gchandle = mono_gchandle_new_weakref ((MonoObject*)d, FALSE);
+ guint32 gchandle;
guint32 old_gchandle;
-#endif
+
mono_marshal_lock ();
if (delegate_hash_table == NULL)
delegate_hash_table = delegate_hash_table_new ();
-#ifdef HAVE_MOVING_COLLECTOR
- old_gchandle = GPOINTER_TO_UINT (g_hash_table_lookup (delegate_hash_table, d->delegate_trampoline));
- g_hash_table_insert (delegate_hash_table, d->delegate_trampoline, GUINT_TO_POINTER (gchandle));
- if (old_gchandle)
- mono_gchandle_free (old_gchandle);
-#else
- g_hash_table_insert (delegate_hash_table, d->delegate_trampoline, d);
-#endif
+ if (mono_gc_is_moving ()) {
+ gchandle = mono_gchandle_new_weakref ((MonoObject*)d, FALSE);
+ old_gchandle = GPOINTER_TO_UINT (g_hash_table_lookup (delegate_hash_table, d->delegate_trampoline));
+ g_hash_table_insert (delegate_hash_table, d->delegate_trampoline, GUINT_TO_POINTER (gchandle));
+ if (old_gchandle)
+ mono_gchandle_free (old_gchandle);
+ } else {
+ g_hash_table_insert (delegate_hash_table, d->delegate_trampoline, d);
+ }
mono_marshal_unlock ();
}
MonoDelegate*
mono_ftnptr_to_delegate (MonoClass *klass, gpointer ftn)
{
-#ifdef HAVE_MOVING_COLLECTOR
guint32 gchandle;
-#endif
MonoDelegate *d;
if (ftn == NULL)
if (delegate_hash_table == NULL)
delegate_hash_table = delegate_hash_table_new ();
-#ifdef HAVE_MOVING_COLLECTOR
- gchandle = GPOINTER_TO_UINT (g_hash_table_lookup (delegate_hash_table, ftn));
- mono_marshal_unlock ();
- if (gchandle)
- d = (MonoDelegate*)mono_gchandle_get_target (gchandle);
- else
- d = NULL;
-#else
- d = g_hash_table_lookup (delegate_hash_table, ftn);
- mono_marshal_unlock ();
-#endif
+ if (mono_gc_is_moving ()) {
+ gchandle = GPOINTER_TO_UINT (g_hash_table_lookup (delegate_hash_table, ftn));
+ mono_marshal_unlock ();
+ if (gchandle)
+ d = (MonoDelegate*)mono_gchandle_get_target (gchandle);
+ else
+ d = NULL;
+ } else {
+ d = g_hash_table_lookup (delegate_hash_table, ftn);
+ mono_marshal_unlock ();
+ }
if (d == NULL) {
/* This is a native function, so construct a delegate for it */
MonoMethodSignature *sig;