DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUGĀ·
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=39605>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED ANDĀ·
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=39605


[EMAIL PROTECTED] changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|Bad core_output_filter      |core_output_filter sends
                   |EAGAIN behavior             |misaligned chunks after
                   |                            |timeout




------- Additional Comments From [EMAIL PROTECTED]  2006-05-18 15:53 -------
Tested it this morning; my fix was not enough.

Stepping back a second, I see this on an strace of brokenness:

here it's trying to send a 130203-byte chunk. Only 27487 bytes get sent out, 
leaving 102716.

    writev(12, [{"1fc9b\r\n", 7}, {"5xwAAIagAJRlhdwPgIoCRoJ0lkWDEICH"..., 
3611}, 
{"QtsAfKloOGu5EQW50evUC2wwSilrLzKE"..., 126592}, {"\r\n", 2}], 4) = 27494

Here it succeeds in sending 66608 bytes, leaving 36108.

    poll([{fd=12, events=POLLOUT, revents=POLLOUT}], 1, 120000) = 1
    writev(12, [{"IEBwkBEAAABQMCAwMIBwUJAgMEBREGBw"..., 102716}, {"\r\n", 2}], 
2) = 66608

Here it succeeds in sending 33304 bytes, leaving 2804.

    poll([{fd=12, events=POLLOUT, revents=POLLOUT}], 1, 120000) = 1
    writev(12, [{"ePFoc8+VaNcmDB5ycecSbTE9/Ps2R7ch"..., 36108}, {"\r\n", 2}], 
2) = 33304

...next write times out:

    poll([{fd=12, events=POLLOUT}], 1, 120000) = 0
    [...some reads from another descriptor...]

And here it goes on to the next chunk, completely forgetting about those 2804 
bytes.

    writev(12, [{"12e8e\r\n", 7}, {"AACD4lSOD4OxYICVU1GVF41QlFGFRZRl"..., 
2452}, {"hDB/
jOkpPxHqDQJh4NcLNujizjHb8wSl"..., 75002}, {"\r\n", 2}], 4) = 10136

With the patch below and another one that makes writev_it_all log everything 
(different run), I see this:

[Thu May 18 08:32:42 2006] [error] writev_it_all 130212 bytes: take 1: 
apr_sendv 130212 bytes -> 
27494
[Thu May 18 08:32:42 2006] [error] writev_it_all 130212 bytes: take 2: 
apr_sendv 102718 bytes -> 
66608
[Thu May 18 08:32:42 2006] [error] writev_it_all 130212 bytes: take 3: 
apr_sendv 36110 bytes -> 
33304
[Thu May 18 08:34:42 2006] [error] (70007)The timeout specified has expired: 
writev_it_all 130212 
bytes: take 4: apr_sendv 2806 bytes -> 0
[Thu May 18 08:34:42 2006] [info] (70007)The timeout specified has expired: 
core_output_filter: 
writing data to the network
[Thu May 18 08:34:42 2006] [error] writev_it_all 77463 bytes: take 1: apr_sendv 
77463 bytes -> 10136

There are two problems here:

(1) APR_TIMEUP; our network's pretty messed up right now so this isn't that 
surprising.

(2) core_output_filter sees the error and gives up on data it has to send 
without aborting the 
connection, causing further chunks to be messed up and diagnosis to be 
frustrating.

I opened this bug for #2. Apparently setting c->aborted isn't enough, though it 
looks like a bunch of 
callers check it before writing stuff. I'll look around a bit more.

-- 
Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to