[Mono-bugs] [Bug 75377][Min] Changed - Cross-AppDomain delegate marshaling bug

bugzilla-daemon at bugzilla.ximian.com bugzilla-daemon at bugzilla.ximian.com
Sat Jun 25 18:53:22 EDT 2005

Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by kornelpal at hotmail.com.


--- shadow/75377	2005-06-25 18:22:20.000000000 -0400
+++ shadow/75377.tmp.17980	2005-06-25 18:53:22.000000000 -0400
@@ -54,6 +54,54 @@
 It this is not "fixed" in .net 2.0, we can probably just close it. It
 is not a security risk (having unmanged privilages trumps all), and
 programs doing this wouldn't be portable.
 The real place to file a "petition for change of framework" is msft's
 bug reporting area.
+------- Additional Comments From kornelpal at hotmail.com  2005-06-25 18:53 -------
+I don't agree with the lot of stuff thing. You are *only* 
+responsible to keep the delegate object alive. There are no other 
+odd responsibilities. I sucked a lot because of this when writing 
+ComIStreamMarshaler.:) The delegate objects are really marshaled 
+(not the methods they point to) so they has to be kept alive. As the 
+trampolines are dynamic code as well that has to be freed by 
+DestroyStructure for example it could be good to maintain a 
+reference to the delegate object by the marshaling runtime but this 
+is not done by MS runtime so it's better to provide compatibility.
+What I reported is a bug altough MS runtime is buggy as well. Please 
+try the test code. You will see that the instance methods are 
+executed in a different AppDomain than the object belongs to. It's 
+very strange and should never happen.
+This means that the object has all the instance and *static* fileds 
+from the AppDomain it was created in but the code is executed in 
+another AppDomain. For example (what I have used in the code to 
+detect buggy behaviour) GCHandles cannot be created from IntPtrs.
+MarshalByRef objects has to be executed in the AppDomain they belong 
+to using proxies without serialization or any other thing. But as 
+the test code shows this behaviour is the same regardless of 
+MarshalByRef and [Serializable]. This is even more strange.
+The expected behaviour should be to do MarshalByRef marshaling 
+anyway to provide identical behaviour for delegate->function pointer-
+>delegate marshaling and unmanaged function pointer->delegete 
+marshaling. This is not managed remoting this is marshaling.
+This is not changing the framework this is just making it work as 
+As delegates are object they have an AppDomain associated to so it 
+is easy to obtain the right AppDomain.
+And I think it's nowhere written that any (non-runtime) object can 
+be used (without proxying) in a different AppDomain it was created 
+And please try the test code before you say we don't want to fix 
+this bug because MS did not fix it and we are copycats.
+I have reported this bug to MS as well but regardless of them this 
+is a bug.

More information about the mono-bugs mailing list