summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJurek Bartuszek <jurek@gentoo.org>2007-09-11 13:49:24 +0000
committerJurek Bartuszek <jurek@gentoo.org>2007-09-11 13:49:24 +0000
commit0595eb14661450b15a3eb79311fe95784c9d5c78 (patch)
treebd14c69d95b6cbf918b10603eddeb91c3727c09e /dev-lang/mono/files
parentalpha/ia64/x86 stable (diff)
downloadhistorical-0595eb14661450b15a3eb79311fe95784c9d5c78.tar.gz
historical-0595eb14661450b15a3eb79311fe95784c9d5c78.tar.bz2
historical-0595eb14661450b15a3eb79311fe95784c9d5c78.zip
dev-lang/mono-1.2.5-r1: fixed issues with remoting (bug #192120)
Package-Manager: portage-2.1.2.12
Diffstat (limited to 'dev-lang/mono/files')
-rw-r--r--dev-lang/mono/files/digest-mono-1.2.5-r13
-rw-r--r--dev-lang/mono/files/mono-1.2.5-remoting.patch48
2 files changed, 51 insertions, 0 deletions
diff --git a/dev-lang/mono/files/digest-mono-1.2.5-r1 b/dev-lang/mono/files/digest-mono-1.2.5-r1
new file mode 100644
index 000000000000..77e998b4c7a1
--- /dev/null
+++ b/dev-lang/mono/files/digest-mono-1.2.5-r1
@@ -0,0 +1,3 @@
+MD5 03a6d15fbf447a7807cc402dc8f64036 mono-1.2.5.tar.bz2 17503807
+RMD160 aaef7d2d8940b917369eabe205c118d887e7ae32 mono-1.2.5.tar.bz2 17503807
+SHA256 2eedf307600e057776cfc2801ac54cded4d5d595d32b549f3b781cc762ade1c6 mono-1.2.5.tar.bz2 17503807
diff --git a/dev-lang/mono/files/mono-1.2.5-remoting.patch b/dev-lang/mono/files/mono-1.2.5-remoting.patch
new file mode 100644
index 000000000000..6dce6e6d8baf
--- /dev/null
+++ b/dev-lang/mono/files/mono-1.2.5-remoting.patch
@@ -0,0 +1,48 @@
+--- trunk/mono/mono/metadata/object.c 2007/08/28 12:48:36 84948
++++ trunk/mono/mono/metadata/object.c 2007/09/08 22:36:32 85526
+@@ -1560,7 +1560,8 @@
+ MonoMethod *cm;
+
+ if ((cm = class->vtable [i]))
+- pvt->vtable [i] = arch_create_remoting_trampoline (cm, target_type);
++ pvt->vtable [i] = mono_method_signature (cm)->generic_param_count
++ ? cm : arch_create_remoting_trampoline (cm, target_type);
+ }
+
+ if (class->flags & TYPE_ATTRIBUTE_ABSTRACT) {
+@@ -1570,7 +1571,7 @@
+ gpointer iter = NULL;
+ while ((m = mono_class_get_methods (k, &iter)))
+ if (!pvt->vtable [m->slot])
+- pvt->vtable [m->slot] = arch_create_remoting_trampoline (m, target_type);
++ pvt->vtable [m->slot] = mono_method_signature (m)->generic_param_count ? m : arch_create_remoting_trampoline (m, target_type);
+ }
+ }
+
+@@ -1609,7 +1610,7 @@
+ iter = NULL;
+ j = 0;
+ while ((cm = mono_class_get_methods (interf, &iter)))
+- pvt->vtable [slot + j++] = arch_create_remoting_trampoline (cm, target_type);
++ pvt->vtable [slot + j++] = mono_method_signature (cm)->generic_param_count ? cm : arch_create_remoting_trampoline (cm, target_type);
+
+ slot += mono_class_num_methods (interf);
+ }
+@@ -1933,8 +1934,15 @@
+ }
+
+ if (is_proxy) {
+- if (!res) res = method; /* It may be an interface or abstract class method */
+- res = mono_marshal_get_remoting_invoke (res);
++ /* It may be an interface, abstract class method or generic method */
++ if (!res || mono_method_signature (res)->generic_param_count)
++ res = method;
++
++ /* generic methods demand invoke_with_check */
++ if (mono_method_signature (res)->generic_param_count)
++ res = mono_marshal_get_remoting_invoke_with_check (res);
++ else
++ res = mono_marshal_get_remoting_invoke (res);
+ }
+
+ g_assert (res);