[Mono-bugs] [Bug 70589][Nor] Changed - bad free() marshalling a ref struct (?)

bugzilla-daemon@bugzilla.ximian.com bugzilla-daemon@bugzilla.ximian.com
Sat, 18 Dec 2004 09:59:29 -0500 (EST)

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 vargaz@gmail.com.


--- shadow/70589	2004-12-15 15:23:25.000000000 -0500
+++ shadow/70589.tmp.15710	2004-12-18 09:59:29.000000000 -0500
@@ -1,14 +1,14 @@
 Bug#: 70589
 Product: Mono: Runtime
 Version: 1.1
+OS: unknown
 OS Details: 
 Status: NEW   
+Severity: Unknown
 Priority: Normal
 Component: JIT
 AssignedTo: mono-bugs@ximian.com                            
 ReportedBy: danw@novell.com               
 QAContact: mono-bugs@ximian.com
 TargetMilestone: ---
@@ -52,6 +52,17 @@
   public static bool Lookup(string stock_id, ref Gtk.StockItem item) {
           bool raw_ret = gtk_stock_lookup(stock_id, ref item);
           bool ret = raw_ret;
           return ret;
+------- Additional Comments From vargaz@gmail.com  2004-12-18 09:59 -------
+I think the problem here is that the runtime attemps to free the
+members of the structure returned by gtk_stock_lookup, and one of string
+members is not dynamically allocated, but points to static memory,
+causing the crash. The solution would be to declare those members as
+IntPtr, not string, and marshal their contents manually. Also,
+looking at the documentation of gtk_stock_lookup, it seems like the
+managed prototype should use 'out' instead of 'ref'. This means the
+runtime does not have to copy the contents of the managed structure to
+the unmanaged structure, speeding things up.