You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by tr...@apache.org on 2009/01/31 23:12:11 UTC
svn commit: r739640 - in /apr/apr/trunk: CHANGES network_io/unix/sendrecv.c
Author: trawick
Date: Sat Jan 31 22:12:11 2009
New Revision: 739640
URL: http://svn.apache.org/viewvc?rev=739640&view=rev
Log:
apr_socket_sendfile() on Solaris: Fix handling of files truncated
after the sender determines the length. (This fixes a busy loop in
httpd when a file being served is truncated.)
Some other implementations of apr_socket_sendfile() were already
patched along the way to handle this; some apparently remain broken.
Modified:
apr/apr/trunk/CHANGES
apr/apr/trunk/network_io/unix/sendrecv.c
Modified: apr/apr/trunk/CHANGES
URL: http://svn.apache.org/viewvc/apr/apr/trunk/CHANGES?rev=739640&r1=739639&r2=739640&view=diff
==============================================================================
--- apr/apr/trunk/CHANGES [utf-8] (original)
+++ apr/apr/trunk/CHANGES [utf-8] Sat Jan 31 22:12:11 2009
@@ -1,4 +1,10 @@
-*- coding: utf-8 -*-
+Changes for APR 2.0.0
+
+ *) apr_socket_sendfile() on Solaris: Fix handling of files truncated
+ after the sender determines the length. (This fixes a busy loop in
+ httpd when a file being served is truncated.) [Jeff Trawick]
+
Changes for APR 1.4.0
*) Win32: Do not error out on apr_pollset_poll() when there are no sockets.
Modified: apr/apr/trunk/network_io/unix/sendrecv.c
URL: http://svn.apache.org/viewvc/apr/apr/trunk/network_io/unix/sendrecv.c?rev=739640&r1=739639&r2=739640&view=diff
==============================================================================
--- apr/apr/trunk/network_io/unix/sendrecv.c (original)
+++ apr/apr/trunk/network_io/unix/sendrecv.c Sat Jan 31 22:12:11 2009
@@ -1083,6 +1083,14 @@
/* Update how much we sent */
*len = nbytes;
+
+ if (nbytes == 0) {
+ /* Most likely the file got smaller after the stat.
+ * Return an error so the caller can do the Right Thing.
+ */
+ return APR_EOF;
+ }
+
if ((sock->timeout > 0) && (*len < requested_len)) {
sock->options |= APR_INCOMPLETE_WRITE;
}