It looks like I was mistaken and the patch was not the cause of the issue I
mentioned. I have continued testing it and it seems to perform correctly so
I am attaching it.

Note that I chose to enable read when write is performed, instead of just
eliminating all cases where read is disabled, because we did not know what
side-effects that might have. In contrast, enabling read while writing,
suggests that the worst side-effects one may experience will be related to
HTTP pipelining (the only case where the client is expected to write
something while waiting for response from server), and so I briefly tested
it as well (via telnet) and all seems to work as expected. It probably
makes sense to test http pipelining some more though.

I did not get a chance to create another unit test, however.

Best,

Ronen




On Wed, Mar 5, 2014 at 11:01 AM, Nick Mathewson <[email protected]> wrote:

> On Tue, Mar 4, 2014 at 9:43 PM, Ronen Mizrahi <[email protected]> wrote:
> > It looks like the patch does create issues with subsequent HTTP requests
> > made on the same connection (for persistent connections) and therefore we
> > won't submit it.
> >
> > The original issue reported however is still very much in effect. It is
> > particularly problematic for long-polling type requests where the server
> > uses evhttp_send_reply_start() and then every once in a while does
> > evhttp_send_reply_chunk(). If the client closes the connection, the
> server
> > won't detect it during the period between different chunks but rather
> only
> > when attempting to send the next chunk. This period can be several
> minutes
> > so this can be a real issue for servers that handle many connections.
>
> What kind of issues did the original patch cause?  Maybe we can track
> those issues down and fix it?
>
> peace,
> --
> Nick
> ***********************************************************************
> To unsubscribe, send an e-mail to [email protected] with
> unsubscribe libevent-users    in the body.
>
--- http.c	2014-03-05 15:05:50.577168380 -0500
+++ http-patched.c	2014-03-05 15:11:13.629154795 -0500
@@ -373,7 +373,7 @@
 	    evhttp_error_cb,
 	    evcon);
 
-	bufferevent_enable(evcon->bufev, EV_WRITE);
+	bufferevent_enable(evcon->bufev, EV_READ | EV_WRITE);
 }
 
 static void
@@ -1150,7 +1150,10 @@
 	}
 
 	if (evcon->bufev != NULL)
+	{
+		bufferevent_disable(evcon->bufev, EV_READ|EV_WRITE);
 		bufferevent_free(evcon->bufev);
+	}
 
 	event_deferred_cb_cancel_(get_deferred_queue(evcon),
 	    &evcon->read_more_deferred_cb);

Reply via email to