[Mono-bugs] [Bug 31174][Cri] Changed - Race condition and early calling of finalizers

bugzilla-daemon@rocky.ximian.com bugzilla-daemon@rocky.ximian.com
25 Sep 2002 06:19:34 -0000

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 miguel@ximian.com.


--- shadow/31174	Tue Sep 24 22:52:56 2002
+++ shadow/31174.tmp.7671	Wed Sep 25 02:19:34 2002
@@ -3,21 +3,21 @@
 Version: unspecified
 OS: other
 OS Details: 
 Status: NEW   
 Severity: Unknown
-Priority: Major
+Priority: Critical
 Component: misc
 AssignedTo: mono-bugs@ximian.com                            
 ReportedBy: gonzalo@ximian.com               
 QAContact: mono-bugs@ximian.com
 TargetMilestone: ---
-Summary: [XSP] internalStream and internalEncoding are null in StreamWriter!!!
+Cc: dick@ximian.com,lupus@ximian.com
+Summary: Race condition and early calling of finalizers
 Description of Problem:
 When running xsp server i get a NullReferenceException. If it isn't throwed
 at startup, it's throwed on first request.
@@ -52,7 +52,61 @@
 ------- Additional Comments From gonzalo@ximian.com  2002-09-24 22:44 -------
 It seems to be a problem in Console.Write* because mono server.exe
 does not even display the "Started processing..." line.
 It works fine with mint.
+------- Additional Comments From miguel@ximian.com  2002-09-25 02:19 -------
+There seems to be some kind of race, I get very different results
+depending on the run (and this might be related to the bug that I CCed
+Dick on).
+Something seems to be disposing objects before they are used with Mono
+(I have not reproduced this with mint yet, but given that it seems
+race-condition bound, that might explain why).
+I had a puts (using PInvoke) in StreamWriter.Dispose and had all
+StreamWriters identified.  I had stdin (id == 3) be disposed, which is
+what sets the internalEncoding and internalStream values to null.
+Another time I saw this:
+Unhandled Exception: System.ObjectDisposedException: The object was
+used after being disposed
+in <0x00060> 00 System.Net.Sockets.TcpClient:CheckDisposed ()
+in <0x0002a> 00 System.Net.Sockets.TcpClient:GetStream ()
+in <0x00042> 00 Mono.ASP.Worker:Run ()
+in <0x00057> 01 System.MulticastDelegate:invoke_void ()
+This is because the TcpClient code has explicit code that checks for
+re-incarnated objects (objects being used which were already disposed). 
+The stack trace from the Dispose() routine is not very useful though:
+	at System.IO.StreamWriter.Dispose()
+	at System.IO.StreamWriter.Finalize()
+	at System.IO.StreamWriter.Finalize()
+	at System.Diagnostics.StackFrame.get_frame_info()
+	at System.Diagnostics.StackFrame.get_frame_info()
+	at System.Diagnostics.StackFrame..ctor()
+	at System.Diagnostics.StackTrace.init_frames()
+	at System.Diagnostics.StackTrace..ctor()
+	at System.IO.StreamWriter.Dispose()
+	at System.IO.StreamWriter.Finalize()
+	at System.IO.StreamWriter.Finalize()
+Destroying: 3
+(that last bit was my debugging message)
+Some other (random times), I will get:
+mono$ MONO_PATH=/cvs/mcs/class/lib mono --noinline server.exe  20001
+Remember that you should rerun the server if you change
+the aspx file!
+Server started.
+Unhandled Exception: System.NullReferenceException: A null value was
+found where an object instance was required
+in <0x0003b> 00 Mono.ASP.Server:RunServer ()
+in <0x00057> 01 System.MulticastDelegate:invoke_void ()