<html><body><div style="color:#000; background-color:#fff; font-family:times new roman, new york, times, serif;font-size:12pt"><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; "><span>Hey, I can copy the stack trace from the call-stack tab in the debugger!  Sweet.  Here it is:</span></div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; "><span><br></span></div><div><span><div><div>System.Drawing.GDIPlus.CheckStatus (status=System.Drawing.Status.InvalidParameter) in mcs/class/System.Drawing/System.Drawing/gdipFunctions.cs:220</div><div>System.Drawing.Graphics.GdipMeasureString (graphics=0xffffffffb4476428, text="Export", font={[Font: Name=DejaVu Sans, Size=8.25, Units=3, GdiCharSet=1, GdiVerticalFont=False]}, layoutRect={{X=0,Y=0,Width=2.147484E+09,Height=2.147484E+09}}, stringFormat=0xffffffffb445b288) in
 mcs/class/System.Drawing/System.Drawing/Graphics.cs:1950</div><div>System.Drawing.Graphics.MeasureString (text="Export", font={[Font: Name=DejaVu Sans, Size=8.25, Units=3, GdiCharSet=1, GdiVerticalFont=False]}, width=2147483647, format={[StringFormat, FormatFlags=0]}) in mcs/class/System.Drawing/System.Drawing/Graphics.cs:1983</div><div>System.Windows.Forms.TextRenderer.MeasureTextInternal (dc={System.Drawing.Graphics}, text="Export", font={[Font: Name=DejaVu Sans, Size=8.25, Units=3, GdiCharSet=1, GdiVerticalFont=False]}, proposedSize={{Width=0, Height=0}}, flags=System.Windows.Forms.TextFormatFlags.HidePrefix, useMeasureString=false) in mcs/class/Managed.Windows.Forms/System.Windows.Forms/TextRenderer.cs:304</div><div>System.Windows.Forms.TextRenderer.MeasureText (text="Export", font={[Font: Name=DejaVu Sans, Size=8.25, Units=3, GdiCharSet=1, GdiVerticalFont=False]}, proposedSize={{Width=0, Height=0}},
 flags=System.Windows.Forms.TextFormatFlags.HidePrefix) in mcs/class/Managed.Windows.Forms/System.Windows.Forms/TextRenderer.cs:137</div><div>System.Windows.Forms.ToolStripItem.CalculateAutoSize () in mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolStripItem.cs:1507</div><div>System.Windows.Forms.ToolStripItem.set_InternalOwner (value=(null)) in mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolStripItem.cs:1898</div><div>System.Windows.Forms.ToolStripItemCollection.Remove (value={Export}) in mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolStripItemCollection.cs:270</div><div>System.Windows.Forms.ToolStripItem.Dispose (disposing=false) in mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolStripItem.cs:963</div><div>System.Windows.Forms.ToolStripDropDownItem.Dispose (disposing=false) in mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolStripDropDownItem.cs:185</div><div>System.Windows.Forms.ToolStripMenuItem.Dispose
 (disposing=false) in mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolStripMenuItem.cs:222</div><div>System.ComponentModel.Component.Finalize () in mcs/class/System/System.ComponentModel/Component.cs:104</div><div><br></div><div>Interesting, this is with a different menu item, "Export"...not the one I selected.</div><div><br></div><div>I don't know if it matters that 32-bit pointers are getting sign-extended to 64-bit pointers, like graphics=0xffffffffb4476428 in System.Drawing.Graphics.GdipMeasureString(), but that looks suspicious too.</div></div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; "><br></div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; ">Steven Boswell</div></span></div><div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt; "><br></div>  <div style="font-size: 12pt; font-family: 'times new roman', 'new york',
 times, serif; "> <div style="font-size: 12pt; font-family: 'times new roman', 'new york', times, serif; "> <div dir="ltr"> <font size="2" face="Arial"> <hr size="1">  <b><span style="font-weight:bold;">From:</span></b> Steven Boswell II <ulatekh@yahoo.com><br> <b><span style="font-weight: bold;">To:</span></b> "mono-devel-list@lists.ximian.com" <mono-devel-list@lists.ximian.com> <br> <b><span style="font-weight: bold;">Sent:</span></b> Friday, June 15, 2012 5:34 PM<br> <b><span style="font-weight: bold;">Subject:</span></b> Re: [Mono-dev] Patches for mono-winforms<br> </font> </div> <br>
<div id="yiv435952070"><div><div style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-size: 12pt; font-family: 'times new roman', 'new york', times, serif; "><div>Enclosed is a new patch, mostly for discussion purposes, since there's no unit test & I don't know how I would write one for this.</div><div><br></div><div>Today, after using my application in a particular way, I got it to crash, putting up an "Exception caught" window.  I can't reproduce the problem outside of running it in the MonoDevelop debugger, and there appears to be no way to copy the contents of the stack-trace tab in the exception-caught window (really? how the heck did THIS get missed?), so I can't post the full details.  But it starts at System.ComponentModel.Finalize() with a tool-strip-item (the one I selected seconds before the crash), and ends in System.Drawing.GDIPlus.CheckStatus(Status), where it reports "A null reference or invalid value was
 found [GDI+ status:
 InvalidParameter]".</div><div><br></div><div>I have no idea why a copy of my menu-item is getting finalized; I certainly didn't make a copy of it.  The good news is, this crash is consistently repeatable, if I just use my application in the same certain order.</div><div><br></div><div>Digging through the stack trace, I arrived at System.Windows.Forms.ToolStripItem.set_InternalOwner, where the owner was being set to null, and right afterwards, CalculateAutoSize() was being called.  Why would anyone need to calculate the size of a menu-item that isn't even connected to a menu any more?  So, for me, the bug fix was obvious: check if the owner isn't null before calling CalculateAutoSize().  That's what the enclosed patch does.</div><div><br></div><div>With this patch, the bug doesn't reproduce, and the menu-item I selected is still there and doing fine.</div><div><br></div><div>Any thoughts on the correctness of this bug fix?
  Or how one would write a unit test for it?  Or how to copy the contents of the stack-trace tab in MonoDevelop's exception-caught window?</div><div><br></div><div>Steven Boswell</div><div><br></div>  </div></div></div><br>_______________________________________________<br>Mono-devel-list mailing list<br><a ymailto="mailto:Mono-devel-list@lists.ximian.com" href="mailto:Mono-devel-list@lists.ximian.com">Mono-devel-list@lists.ximian.com</a><br><a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br><br><br> </div> </div>  </div></body></html>