http://bugzilla.novell.com/show_bug.cgi?id=590042
http://bugzilla.novell.com/show_bug.cgi?id=590042#c0 Summary: Dynamically generated methods/delegates using custom marshalling with p/invoke crash the application Classification: Mono Product: Mono: Runtime Version: 2.6.x Platform: x86-64 OS/Version: Mac OS X 10.5 Status: NEW Severity: Major Priority: P5 - None Component: interop AssignedTo: [email protected] ReportedBy: [email protected] QAContact: [email protected] Found By: --- Blocker: --- Description of Problem: When a delegate type is created dynamically, and the delegate's signature (actually, its Invoke method's signature) uses an ICustomMarshaler, the mono runtimes crashes on a failed assertion. There seems to be some related problem with dynamically generated p/invoke methods too, but only under specific conditions. (Actually, the condition seems to be giving the (marshaled) parameter any value other than null) Steps to reproduce the problem: 1. Create a new type inheriting System.MulticastDelegate insinde of a DynamicAssembly 2. Add the standard constructor for delegate types 3. Implement the Invoke method, and apply a MarshalAsAttribute with CustomMarshaler to (at least) one of the parameters. 4. Create the actual type and instantiate a delegate 5. Use the instantiated delegate for p/invoke 6. Or: Create a dynamic P/Invoke method with at least one custom marshaler as parameter, and invoke it with something else than null as value. Actual Results: ** ERROR:marshal.c:5271:emit_marshal_custom: assertion failed: (mtype != NULL) Stacktrace: at (wrapper managed-to-native) object.__icall_wrapper_mono_delegate_to_ftnptr (object) <0x00004> at (wrapper managed-to-native) object.__icall_wrapper_mono_delegate_to_ftnptr (object) <0x00004> at (wrapper managed-to-native) EmitMarshalTestCase.Program.dummyMethod (System.Delegate) <IL 0x00003, 0x00026> at EmitMarshalTestCase.Program.Main (string[]) [0x0025a] in /Users/Fabien/Documents/MonoDevelop Projects/EmitMarshalTestCase/EmitMarshalTestCase/EmitMarshalTestCase.cs:131 at (wrapper runtime-invoke) <Module>.runtime_invoke_void_object (object,intptr,intptr,intptr) <IL 0x0001d, 0x00043> L'application s'est terminée suite au signal: SIGIOT Expected Results: No error. (Verified on MS.NET's runtime) How often does this happen? Always. Additional Information: 1. It seems that when a delegate with the same signature (and mashaling) is generated by the C# compiler (csc or gmcs) and then instantiated (the instantiation is the important part) and used with the same p/invoke method, the dynamically created delegate won't crash thereafter. However, this completely defeats the purpose of a dynamically created delegate. 2. From the code where the assertions fails, it seems that there is a problem in resolving the custom marshaler's type from the extracted method's metadata, but the exact origin of the problem is difficult to locate without a very good understanding of the mono runtime internals. -- Configure bugmail: http://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the QA contact for the bug. You are the assignee for the bug. _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
