MonoClass *klass;
static gboolean module_initialized = FALSE;
+ static gboolean icalls_registered = FALSE;
if (module_initialized)
return;
klass = mono_class_from_name (mono_defaults.corlib, "System.Runtime.Remoting.Contexts", "Context");
method_needs_context_sink = mono_class_get_method_from_name (klass, "get_NeedsContextSink", -1);
- register_icall (type_from_handle, "type_from_handle", "object ptr", FALSE);
- register_icall (mono_marshal_set_domain_by_id, "mono_marshal_set_domain_by_id", "int32 int32 int32", FALSE);
- register_icall (mono_marshal_check_domain_image, "mono_marshal_check_domain_image", "int32 int32 ptr", FALSE);
- register_icall (mono_marshal_xdomain_copy_value, "mono_marshal_xdomain_copy_value", "object object", FALSE);
- register_icall (mono_marshal_xdomain_copy_out_value, "mono_marshal_xdomain_copy_out_value", "void object object", FALSE);
- register_icall (mono_remoting_wrapper, "mono_remoting_wrapper", "object ptr ptr", FALSE);
- register_icall (mono_upgrade_remote_class_wrapper, "mono_upgrade_remote_class_wrapper", "void object object", FALSE);
+ mono_loader_lock ();
+
+ if (!icalls_registered) {
+ register_icall (type_from_handle, "type_from_handle", "object ptr", FALSE);
+ register_icall (mono_marshal_set_domain_by_id, "mono_marshal_set_domain_by_id", "int32 int32 int32", FALSE);
+ register_icall (mono_marshal_check_domain_image, "mono_marshal_check_domain_image", "int32 int32 ptr", FALSE);
+ register_icall (mono_marshal_xdomain_copy_value, "mono_marshal_xdomain_copy_value", "object object", FALSE);
+ register_icall (mono_marshal_xdomain_copy_out_value, "mono_marshal_xdomain_copy_out_value", "void object object", FALSE);
+ register_icall (mono_remoting_wrapper, "mono_remoting_wrapper", "object ptr ptr", FALSE);
+ register_icall (mono_upgrade_remote_class_wrapper, "mono_upgrade_remote_class_wrapper", "void object object", FALSE);
+ }
+
+ icalls_registered = TRUE;
+
+ mono_loader_unlock ();
module_initialized = TRUE;
}
MonoDomain *domain = mono_domain_get ();
MonoClass *klass = mono_class_from_mono_type (handle);
- MONO_ARCH_SAVE_REGS;
-
mono_class_init (klass);
return mono_type_get_object (domain, handle);
}
}
return;
}
+ default:
+ break;
}
- if (mono_object_class (src) == mono_defaults.stringbuilder_class) {
- MonoStringBuilder *src_sb = (MonoStringBuilder *) src;
- MonoStringBuilder *dst_sb = (MonoStringBuilder *) dst;
-
- MONO_OBJECT_SETREF (dst_sb, str, mono_string_new_utf16 (mono_object_domain (dst), mono_string_chars (src_sb->str), mono_string_length (src_sb->str)));
- dst_sb->cached_str = NULL;
- dst_sb->length = src_sb->length;
- }
}
mono_upgrade_remote_class (domain, (MonoObject*)tproxy, klass);
}
+#else /* DISABLE_REMOTING */
+
+void
+mono_remoting_init (void)
+{
+}
+
#endif /* DISABLE_REMOTING */
/* mono_get_xdomain_marshal_type()
return MONO_MARSHAL_COPY;
break;
}
+ default:
+ break;
}
-
return MONO_MARSHAL_SERIALIZE;
}
}
return (MonoObject *) acopy;
}
+ default:
+ break;
}
- if (mono_object_class (val) == mono_defaults.stringbuilder_class) {
- MonoStringBuilder *oldsb = (MonoStringBuilder *) val;
- MonoStringBuilder *newsb = (MonoStringBuilder *) mono_object_new (domain, mono_defaults.stringbuilder_class);
- MONO_OBJECT_SETREF (newsb, str, mono_string_new_utf16 (domain, mono_string_chars (oldsb->str), mono_string_length (oldsb->str)));
- newsb->length = oldsb->length;
- newsb->max_capacity = (gint32)0x7fffffff;
- return (MonoObject *) newsb;
- }
return NULL;
}