[prev in list] [next in list] [prev in thread] [next in thread] 

List:       mono-bugs
Subject:    [Mono-bugs] [Bug 357519] New: IDisposable incorrectly implemented
From:       bugzilla_noreply () novell ! com
Date:       2008-01-31 7:54:46
Message-ID: bug-357519-28286 () https ! bugzilla ! novell ! com/
[Download RAW message or body]

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@lists.ximian.com
        ReportedBy: atlaste@yahoo.com
         QAContact: mono-bugs@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.
_______________________________________________
mono-bugs maillist  -  mono-bugs@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-bugs
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic