After some searching, this issue appears to be caused by a
longstanding Webkit/Safari issue.  There is a workaround on the client
side.

For info on it, see:  http://efwjames.com/2011/11/safari-file-upload-hang-up/

On Apr 24, 5:33 pm, jgar <[email protected]> wrote:
> We have a Django 1.3.1 application running with mod_wsgi 3.3 in daemon
> mode on a OS X 10.6 development machine running Apache 2.2.21 with
> Python 2.6.1.  The daemon mode settings are 1 process, 15 threads with
> send and receive buffers set to 5MB each.
>
> On this development machine we are running in to a problem where the
> application hangs/freezes occasionally when uploading a file to the
> server using a multipart POST request.  The test case gets the freeze
> about 30% of the time.  We currently cannot reproduce this on a Cent
> OS server with the same code.
>
> Through some painful debugging, I've traced the blocking problem down
> to line 2218 in mod_wsgi.c in the Input_read method:
>
>                 n = ap_get_client_block(self->r, buffer + length,
>                                         size - length);
>
> The Input_read method is triggered from Django request.POST which
> ultimately calls the wsgi.input read method requesting 25739 bytes
> (same as CONTENT_LENGTH).  This is the first time the method was
> called on this request which means that the buffer should contain the
> right amount of bytes.
>
> When I print some of the variables before and after the offending
> ap_get_client_block line, here's what I have when everything works
> fine:
>
> Input_read inside loop before getclientblock length 0, size 25739.
> should client block 1
> Input_read inside loop after getclientblock length 0, size 25739, n:
> 8000
> Input_read inside loop before getclientblock length 8000, size 25739.
> should client block 0
> Input_read inside loop after getclientblock length 8000, size 25739,
> n: 8000
> Input_read inside loop before getclientblock length 16000, size 25739.
> should client block 0
> Input_read inside loop after getclientblock length 16000, size 25739,
> n: 8000
> Input_read inside loop before getclientblock length 24000, size 25739.
> should client block 0
> Input_read inside loop after getclientblock length 24000, size 25739,
> n: 1739
> Input_read before return length 25739, size 25739
>
> Here's what happens just before it freezes:
>
> Input_read inside loop before getclientblock length 0, size 25739.
> should client block 1
> Input_read inside loop after getclientblock  length 0, size 25739, n:
> 562
> Input_read inside loop before getclientblock length 562, size 25739.
> should client block 0
>
> From this it appears it is blocking at byte 563.
>
> Any idea what could be causing this to block here?  Is there a bug
> here with Apache?  Any ideas would be appreciated.
>
> Thanks!

-- 
You received this message because you are subscribed to the Google Groups 
"modwsgi" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/modwsgi?hl=en.

Reply via email to