[Mono-bugs] [Bug 79112][Wis] New - HttpListenerRequest.InputStream.Read blocks indefinitively

bugzilla-daemon at bugzilla.ximian.com bugzilla-daemon at bugzilla.ximian.com
Sun Aug 20 02:04:42 EDT 2006

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 steveb at mindtouch.com.


--- shadow/79112	2006-08-20 02:04:42.000000000 -0400
+++ shadow/79112.tmp.28157	2006-08-20 02:04:42.000000000 -0400
@@ -0,0 +1,61 @@
+Bug#: 79112
+Product: Mono: Class Libraries
+Version: 1.1
+OS: All
+OS Details: Debian, OS X
+Status: NEW   
+Priority: Wishlist
+Component: Sys.Web
+AssignedTo: gonzalo at ximian.com                            
+ReportedBy: steveb at mindtouch.com               
+QAContact: mono-bugs at ximian.com
+TargetMilestone: ---
+Summary: HttpListenerRequest.InputStream.Read blocks indefinitively
+First, you need the MindTouch Dream source at:
+    svn://dev.opengarden.org/svn/trunk/product/dream
+To build, execute
+    build.sh
+Description of Problem: reading from HttpListenerRequest.InputStream on
+another worker thread blocks the operation indefinitively
+Steps to reproduce the problem:
+1. build Dream using 'build.sh'
+2. change to the 'bin' folder
+3. execute 'mono --debug mindtouch.host.exe'
+4. open another terminal window
+5. go to the 'mindtouch.host' folder
+6. execute 'curl -H 'Content-Type: text/xml' -d @show-headers.startup.xml
+Actual Results:
+The terminal running the Dream host will show that the message was
+received, but will block processing it.  Specifically, it blocks at
+'DreamMessage.cs:Document' when it tries to deserialize the XDoc from
+'_stream' near line 178.  More details on the internal processing order below.
+Expected Results:
+Have 'DreamMessage.Document' succeed without blocking.  (NOTE: the
+operation itself might not succeed, but that's ok)
+How often does this happen? 
+Always on OS X.
+Additional Information:
+Here is the sequence of events that occur when a message is reiceved.
+1. 'mindtouch.core/httptransport.cs' sets up an async HttpListener.  When a
+message arrives, 'HttpTransport.CommonRequestHandler' is invoked.
+2. 'CommonRequestHandler' creates a 'DreamMessage' using
+'HttpListenereRequest.InputStream' (note that the input stream is not read yet)
+3. the DreamMessage is handed off to the DreamEnvironment, which locates
+the method delegate to invoke for this request
+4. the delegate uses 'DreamRequest.ReceiveXDoc' to retrieve the request
+5. 'DreamRequest.ReceiveXDoc' invokes 'DreamMessage.Message' to deserialize
+the input stream (this is when it blocks)

More information about the mono-bugs mailing list