[Mono-bugs] [Bug 357519] New: IDisposable incorrectly implemented in streams

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Thu Jan 31 02:54:46 EST 2008


https://bugzilla.novell.com/show_bug.cgi?id=357519


           Summary: IDisposable incorrectly implemented in streams
           Product: Mono: Class Libraries
           Version: 1.2.5
          Platform: Other
        OS/Version: Debian Woody
            Status: NEW
          Severity: Normal
          Priority: P5 - None
         Component: System
        AssignedTo: mono-bugs at lists.ximian.com
        ReportedBy: atlaste at yahoo.com
         QAContact: mono-bugs at lists.ximian.com
          Found By: Customer


Description of Problem:

Mono doesn't handle dispose correctly in streams.


Unhandled Exception: System.ObjectDisposedException: The object was used after
being disposed.
  at System.IO.Compression.DeflateStream.FlushInternal (Boolean finish)
[0x00000]
  at System.IO.Compression.DeflateStream.Dispose (Boolean disposing) [0x00000]
  at System.IO.Stream.Close () [0x00000]
  at System.IO.Stream.Dispose () [0x00000]
  at (wrapper remoting-invoke-with-check) System.IO.Stream:Dispose ()
  at System.IO.Compression.GZipStream.Dispose (Boolean disposing) [0x00000]
  at System.IO.Stream.Close () [0x00000]
  at System.IO.BinaryWriter.Dispose (Boolean disposing) [0x00000]
  at System.IO.BinaryWriter.System.IDisposable.Dispose () [0x00000]
  at DictionaryBuilding.ProbDict.Merge.GeneralWriter.WriteAll () [0x00000]
  at DictionaryBuilding.ProbDict.EMAlgorithm.EM (Int32 steps) [0x00000]
  at DictionaryBuilding.DictionaryBuilding.Calculate () [0x00000]
  at DictionaryBuilding.Program.Main (System.String[] args) [0x00000]

Unhandled Exception: System.ObjectDisposedException: The object was used after
being disposed.
  at System.IO.Compression.DeflateStream.FlushInternal (Boolean finish)
[0x00000]
  at System.IO.Compression.DeflateStream.Dispose (Boolean disposing) [0x00000]
  at System.IO.Stream.Close () [0x00000]
  at System.IO.Stream.Dispose () [0x00000]
  at (wrapper remoting-invoke-with-check) System.IO.Stream:Dispose ()
  at System.IO.Compression.GZipStream.Dispose (Boolean disposing) [0x00000]
  at System.IO.Stream.Close () [0x00000]
  at System.IO.Stream.System.IDisposable.Dispose () [0x00000]
  at DictionaryBuilding.ProbDict.Merge.GeneralWriter.WriteAll () [0x00000]
  at DictionaryBuilding.ProbDict.EMAlgorithm.EM (Int32 steps) [0x00000]
  at DictionaryBuilding.DictionaryBuilding.Calculate () [0x00000]
  at DictionaryBuilding.Program.Main (System.String[] args) [0x00000]
*** glibc detected *** mono: double free or corruption (!prev): 0x08483100 ***

Source code:

using (Stream s1 = new BufferedStream(File.OpenWrite(filename))) 
            {
                using (GZipStream s = new GZipStream(s1,
CompressionMode.Compress))
                {
                    using (BinaryWriter bw = new BinaryWriter(s))
                    {
                        foreach (Wordpair wp in child.Iterate())
                        {
                            if (wp.P >= 0.0f)
                            {
                                bw.Write(wp.X);
                                bw.Write(wp.Y);
                                bw.Write(wp.P);
                            }
                        }
                        bw.Write(-1);
                        bw.Write(-1);
                        bw.Write(-1);
                        bw.Close();
                    }
                    s.Close();
                }
                s1.Close();
            }

Note that this code is perfectly legal in .NET!

Actual Results:
Crash

Expected Results:
No crash :-)

How often does this happen? 
Always

Additional Information:
Behavior of IDisposable is incorrect. This happens in almost all classes with
resources that are being managed. The solution is to implement the IDisposable
pattern as stated on microsoft.com correctly.

Greetings,
Stefan.


-- 
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.


More information about the mono-bugs mailing list