[Mono-bugs] [Bug 31265][Maj] Changed - Problems with GCHandle

bugzilla-daemon@rocky.ximian.com bugzilla-daemon@rocky.ximian.com
21 Nov 2002 16:21:14 -0000

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 gkodinov@openlinksw.co.uk.


--- shadow/31265	Tue Nov 19 08:26:07 2002
+++ shadow/31265.tmp.21318	Thu Nov 21 11:21:14 2002
@@ -73,6 +73,24 @@
 in ves_icall_System_GCHandle_GetTargetHandle().
 I assume the code will break without the threaded finalizer, but the
 test is deadlocking too soon to show it.
+------- Additional Comments From gkodinov@openlinksw.co.uk  2002-11-21 11:21 -------
+As far as I get it the ves_icall_System_GCHandle_GetTargetHandle is
+returing the pointer's offset into a global table and it's type
+stuffed together as a "handle".
+It stores the pointer into the gc_handles array and doesn't store the
+"handle type" anywhere.
+But it so appears that the handle type is needed to actually copy the
+array, when it needs to expand (so it is able to tell the GC the 
+thing ;-)
+That's why I've added an new array : gc_handle_types to paralel the
+pointers array and to store the type for each handle. It's not the
+perfect solution, but it works (or should ;-)
+So you can't actually check the last bit of the original pointer
+instead of it's type - it will be "Las Vegas" style of programming 
+The fact that it worked for you IMHO means you were lucky.