[Mono-dev] TextBoxBase Out of Memory Problem

Sebastien Pouliot sebastien.pouliot at gmail.com
Sat Jan 20 08:14:09 EST 2007


On Fri, 2007-01-19 at 21:56 -0800, Charlie Poole wrote:
> Hi Sebastien,
> 
> This is on Windows using stock 1.2.2, so maybe it's fixed.
> 
> I'll try building from SVN and see what happens. Any reason
> I can't just build MWF and drop the assembly into my stock
> system?

Updating System.Drawing.dll should be enough to fix this issue
(libgdiplus isn't required under Win32). But you may want to try,
separately, the new MWF assembly prior to the next release :-)

> Charlie 
> 
> > -----Original Message-----
> > From: Sebastien Pouliot [mailto:sebastien.pouliot at gmail.com] 
> > Sent: Friday, January 19, 2007 7:10 PM
> > To: Charlie Poole
> > Cc: 'mono-devel'
> > Subject: Re: [Mono-dev] TextBoxBase Out of Memory Problem
> > 
> > Hello Charlie,
> > 
> > Are you using Mono from SVN ? (if so which revision ?) or 
> > stock 1.2.2 ?
> > 
> > I believe I fixed today this problem (it affects only Win32). 
> > The DC was not released because the p/invoke signature missed 
> > a parameter.
> > 
> > Sebastien
> > 
> > On Fri, 2007-01-19 at 18:23 -0800, Charlie Poole wrote:
> > > Hi All,
> > > 
> > > While it's probably not a good idea to keep hitting a text box with 
> > > AppendText calls, that's what the NUnit Gui does at the moment, 
> > > resulting in the stack trace below.
> > > 
> > > This is a bit hard to repro, since NUnit tries to handle 
> > the unhandled 
> > > exception, making matters even worse. I got it by running the NUnit 
> > > tests with labels turned on, so that each test caused at least one 
> > > write to the output tab. To get the stack trace, I modified 
> > NUnit to 
> > > not capture unhandled exceptions and ran it under mono with 
> > --debug. 
> > > If this is not already a known problem, I can try to create 
> > a simple test for it.
> > > 
> > > Charlie
> > > 
> > > 
> > > D:\Dev\NUnit\nunit-2.4\build\mono\1.0\debug>mono --debug nunit.exe
> > > 
> > > Unhandled Exception: System.Reflection.TargetInvocationException: 
> > > Exception has been thrown by the target of an invocation. ---> 
> > > System.Reflection.TargetInvocat
> > > ionException: Exception has been thrown by the target of an 
> > > invocation. ---> Sys
> > > tem.OutOfMemoryException: Out of memory.
> > >   at System.Drawing.GDIPlus.CheckStatus (Status status) 
> > [0x00078] in 
> > > C:\cygwin\t 
> > > 
> > mp\scratch\mono-1.2.2\mcs\class\System.Drawing\System.Drawing\
> > gdipFunctions.
> > > cs:1
> > > 92
> > >   at System.Drawing.Graphics.FromHdc (IntPtr hdc) [0x00009] in 
> > > C:\cygwin\tmp\scr
> > > 
> > atch\mono-1.2.2\mcs\class\System.Drawing\System.Drawing\Graphi
> > cs.cs:1673
> > >   at System.Drawing.Font.ToLogFont (System.Object logFont) 
> > [0x0007a] 
> > > in C:\cygwi 
> > > 
> > n\tmp\scratch\mono-1.2.2\mcs\class\System.Drawing\System.Drawi
> > ng\Font.cs:620
> > >   at System.Drawing.Font.ToHfont () [0x00059] in 
> > > C:\cygwin\tmp\scratch\mono-1.2.
> > > 2\mcs\class\System.Drawing\System.Drawing\Font.cs:267
> > >   at (wrapper remoting-invoke-with-check) 
> > System.Drawing.Font:ToHfont ()
> > >   at System.Windows.Forms.XplatUIWin32.GetFontMetrics
> > > (System.Drawing.Graphics g
> > > , System.Drawing.Font font, System.Int32& ascent, System.Int32& 
> > > descent)
> > > [0x0001
> > > 3] in
> > > 
> > C:\cygwin\tmp\scratch\mono-1.2.2\mcs\class\Managed.Windows.Forms\Syste
> > > m.Wi
> > > ndows.Forms\XplatUIWin32.cs:2019
> > >   at System.Windows.Forms.XplatUI.GetFontMetrics 
> > > (System.Drawing.Graphics g, Sys tem.Drawing.Font font, 
> > System.Int32& 
> > > ascent, System.Int32& descent) [0x00000] in
> > >  
> > > 
> > C:\cygwin\tmp\scratch\mono-1.2.2\mcs\class\Managed.Windows.Forms\Syste
> > > m.Wind
> > > ows
> > > .Forms\XplatUI.cs:516
> > >   at System.Windows.Forms.Line.RecalculateLine 
> > > (System.Drawing.Graphics g, Syste m.Windows.Forms.Document doc) 
> > > [0x002dd] in C:\cygwin\tmp\scratch\mono-1.2.2\mcs\
> > > class\Managed.Windows.Forms\System.Windows.Forms\TextControl.cs:525
> > >   at System.Windows.Forms.Document.RecalculateDocument
> > > (System.Drawing.Graphics
> > > g, Int32 start, Int32 end, Boolean optimize) [0x0007f] in 
> > > C:\cygwin\tmp\scratch\ 
> > > 
> > mono-1.2.2\mcs\class\Managed.Windows.Forms\System.Windows.Form
> > s\TextControl.
> > > cs:3
> > > 791
> > >   at System.Windows.Forms.Document.RecalculateDocument
> > > (System.Drawing.Graphics
> > > g) [0x00000] in
> > > C:\cygwin\tmp\scratch\mono-1.2.2\mcs\class\Managed.Windows.Forms
> > > \System.Windows.Forms\TextControl.cs:3745
> > >   at System.Windows.Forms.TextBoxBase.CalculateDocument () 
> > [0x0000c] 
> > > in C:\cygwi 
> > > 
> > n\tmp\scratch\mono-1.2.2\mcs\class\Managed.Windows.Forms\System.Window
> > > s.Form
> > > s\Te
> > > xtBoxBase.cs:1591
> > >   at System.Windows.Forms.TextBoxBase.AppendText 
> > (System.String text) 
> > > [0x00077] in 
> > > 
> > C:\cygwin\tmp\scratch\mono-1.2.2\mcs\class\Managed.Windows.Forms\Syste
> > > m.Wind
> > > o
> > > ws.Forms\TextBoxBase.cs:639
> > >   at <0x00000> <unknown method>
> > >   at (wrapper managed-to-native) 
> > > System.Reflection.MonoMethod:InternalInvoke
> > > (ob
> > > ject,object[])
> > >   at System.Reflection.MonoMethod.Invoke (System.Object obj, 
> > > BindingFlags invoke Attr, System.Reflection.Binder binder, 
> > > System.Object[] parameters, System.Global 
> > ization.CultureInfo culture) 
> > > [0x00040] in C:\cygwin\tmp\scratch\mono-1.2.2\mcs\c
> > > lass\corlib\System.Reflection\MonoMethod.cs:143 --- End of inner 
> > > exception stack  trace ---
> > > 
> > >   at System.Reflection.MonoMethod.Invoke (System.Object obj, 
> > > BindingFlags invoke Attr, System.Reflection.Binder binder, 
> > > System.Object[] parameters, System.Global 
> > ization.CultureInfo culture) 
> > > [0x00065] in C:\cygwin\tmp\scratch\mono-1.2.2\mcs\c
> > > lass\corlib\System.Reflection\MonoMethod.cs:149
> > >   at System.Reflection.MethodBase.Invoke (System.Object obj, 
> > > System.Object[] par
> > > ameters) [0x00000] in
> > > C:\cygwin\tmp\scratch\mono-1.2.2\mcs\class\corlib\System.R
> > > eflection\MethodBase.cs:86
> > >   at System.Delegate.DynamicInvokeImpl (System.Object[] args) 
> > > [0x00051] in C:\cy
> > > gwin\tmp\scratch\mono-1.2.2\mcs\class\corlib\System\Delegate.cs:285
> > >   at System.MulticastDelegate.DynamicInvokeImpl 
> > (System.Object[] args) 
> > > [0x00018]  in 
> > > 
> > C:\cygwin\tmp\scratch\mono-1.2.2\mcs\class\corlib\System\MulticastDele
> > > gate.c
> > > s:67
> > >   at System.Delegate.DynamicInvoke (System.Object[] args) 
> > [0x00000] in 
> > > C:\cygwin
> > > \tmp\scratch\mono-1.2.2\mcs\class\corlib\System\Delegate.cs:257
> > >   at System.Windows.Forms.Control.Invoke (System.Delegate method, 
> > > System.Object[ ] args) [0x0000b] in 
> > > C:\cygwin\tmp\scratch\mono-1.2.2\mcs\class\Managed.Windows.
> > > Forms\System.Windows.Forms\Control.cs:2931
> > >   at (wrapper remoting-invoke-with-check) 
> > > System.Windows.Forms.Control:Invoke (S
> > > ystem.Delegate,object[])
> > >   at NUnit.UiKit.TextBoxWriter.AppendToTextBox (System.String s) 
> > > [0x00000] in D:
> > > \Dev\NUnit\nunit-2.4\src\GuiComponents\UiKit\TextBoxWriter.cs:176
> > >   at NUnit.UiKit.TextBoxWriter.Write (System.String s) [0x00034] in 
> > > D:\Dev\NUnit
> > > \nunit-2.4\src\GuiComponents\UiKit\TextBoxWriter.cs:125
> > >   at NUnit.UiKit.TextBoxWriter.Write (Char c) [0x00000] in 
> > > D:\Dev\NUnit\nunit-2.
> > > 4\src\GuiComponents\UiKit\TextBoxWriter.cs:108
> > >   at System.IO.TextWriter.Write (System.Char[] buffer, Int32 index, 
> > > Int32
> > > count)
> > >  [0x0004f] in
> > > C:\cygwin\tmp\scratch\mono-1.2.2\mcs\class\corlib\System.IO\TextWr
> > > iter.cs:201
> > >   at System.IO.TextWriter.Write (System.Char[] value) [0x00008] in 
> > > C:\cygwin\tmp
> > > \scratch\mono-1.2.2\mcs\class\corlib\System.IO\TextWriter.cs:128
> > >   at System.IO.TextWriter.WriteLine () [0x00000] in
> > > C:\cygwin\tmp\scratch\mono-1
> > > .2.2\mcs\class\corlib\System.IO\TextWriter.cs:217
> > >   at System.IO.TextWriter.WriteLine (System.String format, 
> > > System.Object
> > > arg0) [
> > > 0x00008] in
> > > C:\cygwin\tmp\scratch\mono-1.2.2\mcs\class\corlib\System.IO\TextWrit
> > > er.cs:297
> > >   at NUnit.UiKit.ResultTabs.OnTestStarting (System.Object sender, 
> > > NUnit.Util.Tes tEventArgs args) [0x00016] in 
> > > D:\Dev\NUnit\nunit-2.4\src\GuiComponents\UiKit\Res
> > > ultTabs.cs:376
> > >   at <0x00000> <unknown method>
> > >   at (wrapper managed-to-native) 
> > > System.Reflection.MonoMethod:InternalInvoke
> > > (ob
> > > ject,object[])
> > >   at System.Reflection.MonoMethod.Invoke (System.Object obj, 
> > > BindingFlags invoke Attr, System.Reflection.Binder binder, 
> > > System.Object[] parameters, System.Global 
> > ization.CultureInfo culture) 
> > > [0x00040] in C:\cygwin\tmp\scratch\mono-1.2.2\mcs\c
> > > lass\corlib\System.Reflection\MonoMethod.cs:143 --- End of inner 
> > > exception stack  trace ---
> > > 
> > >   at System.Reflection.MonoMethod.Invoke (System.Object obj, 
> > > BindingFlags invoke Attr, System.Reflection.Binder binder, 
> > > System.Object[] parameters, System.Global 
> > ization.CultureInfo culture) 
> > > [0x00065] in C:\cygwin\tmp\scratch\mono-1.2.2\mcs\c
> > > lass\corlib\System.Reflection\MonoMethod.cs:149
> > >   at System.Reflection.MethodBase.Invoke (System.Object obj, 
> > > System.Object[] par
> > > ameters) [0x00000] in
> > > C:\cygwin\tmp\scratch\mono-1.2.2\mcs\class\corlib\System.R
> > > eflection\MethodBase.cs:86
> > >   at System.Delegate.DynamicInvokeImpl (System.Object[] args) 
> > > [0x00051] in C:\cy
> > > gwin\tmp\scratch\mono-1.2.2\mcs\class\corlib\System\Delegate.cs:285
> > >   at System.MulticastDelegate.DynamicInvokeImpl 
> > (System.Object[] args) 
> > > [0x00018]  in 
> > > 
> > C:\cygwin\tmp\scratch\mono-1.2.2\mcs\class\corlib\System\MulticastDele
> > > gate.c
> > > s:67
> > >   at System.Delegate.DynamicInvoke (System.Object[] args) 
> > [0x00000] in 
> > > C:\cygwin
> > > \tmp\scratch\mono-1.2.2\mcs\class\corlib\System\Delegate.cs:257
> > >   at System.Windows.Forms.XplatUIDriverSupport.ExecuteClientMessage
> > > (GCHandle gc
> > > handle) [0x0003d] in
> > > C:\cygwin\tmp\scratch\mono-1.2.2\mcs\class\Managed.Windows.
> > > Forms\System.Windows.Forms\XplatUIDriver.cs:335
> > >   at System.Windows.Forms.XplatUIWin32.GetMessage 
> > > (System.Windows.Forms.MSG& msg , IntPtr hWnd, Int32 
> > wFilterMin, Int32 
> > > wFilterMax, Boolean blocking) [0x00131] i n 
> > > 
> > C:\cygwin\tmp\scratch\mono-1.2.2\mcs\class\Managed.Windows.Forms\Syste
> > > m.Wind
> > > ow
> > > s.Forms\XplatUIWin32.cs:1532
> > >   at System.Windows.Forms.XplatUIWin32.GetMessage (System.Object 
> > > queue_id, Syste m.Windows.Forms.MSG& msg, IntPtr hWnd, Int32 
> > > wFilterMin, Int32 wFilterMax) [0x00 000] in 
> > > 
> > C:\cygwin\tmp\scratch\mono-1.2.2\mcs\class\Managed.Windows.For
> > ms\System.
> > > Windows.Forms\XplatUIWin32.cs:1480
> > >   at System.Windows.Forms.XplatUI.GetMessage (System.Object 
> > queue_id, 
> > > System.Win dows.Forms.MSG& msg, IntPtr hWnd, Int32 
> > wFilterMin, Int32 
> > > wFilterMax) [0x00000] in 
> > > 
> > C:\cygwin\tmp\scratch\mono-1.2.2\mcs\class\Managed.Windows.Forms\Syste
> > > m.Wind
> > > o
> > > ws.Forms\XplatUI.cs:527
> > >   at System.Windows.Forms.Application.RunLoop (Boolean Modal, 
> > > System.Windows.For ms.ApplicationContext context) [0x002be] in 
> > > C:\cygwin\tmp\scratch\mono-1.2.2\mcs
> > > \class\Managed.Windows.Forms\System.Windows.Forms\Application.cs:552
> > >   at System.Windows.Forms.Application.Run (System.Windows.Forms.Form
> > > mainForm) [
> > > 0x00000] in
> > > C:\cygwin\tmp\scratch\mono-1.2.2\mcs\class\Managed.Windows.Forms\Sys
> > > tem.Windows.Forms\Application.cs:430
> > >   at NUnit.Gui.AppEntry.Main (System.String[] args) [0x001d1] in 
> > > D:\Dev\NUnit\nu
> > > nit-2.4\src\GuiRunner\nunit-gui\AppEntry.cs:123
> > >   at NUnit.Gui.Class1.Main (System.String[] args) [0x00000] in 
> > > D:\Dev\NUnit\nuni
> > > t-2.4\src\GuiRunner\nunit-gui-exe\Class1.cs:16
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > _______________________________________________
> > > Mono-devel-list mailing list
> > > Mono-devel-list at lists.ximian.com
> > > http://lists.ximian.com/mailman/listinfo/mono-devel-list
> > 
> > 
> 
> 
-- 
Sebastien Pouliot  <sebastien at ximian.com>
Blog: http://pages.infinit.net/ctech/




More information about the Mono-devel-list mailing list