|
Author: Alexandre Rossi <alexandre.rossi@gmail.com>
|
|
Description: Fix download stalling on recent libevhtp
|
|
A while ago[1], evhtp_request_pause() behavior changed: it now disables
|
|
both read and write events. seafile-server would then stall.
|
|
.
|
|
[1] https://github.com/criticalstack/libevhtp/commit/6cd89466fd6bd76c5b8624be65af5893afe3e40c
|
|
[2] https://github.com/haiwen/seafile/issues/1119
|
|
Forwarded: no
|
|
|
|
--- a/server/access-file.c
|
|
+++ b/server/access-file.c
|
|
@@ -665,7 +665,7 @@ do_file(evhtp_request_t *req, SeafRepo *
|
|
/* Block any new request from this connection before finish
|
|
* handling this request.
|
|
*/
|
|
- evhtp_request_pause (req);
|
|
+ bufferevent_disable(bev, EV_READ);
|
|
|
|
/* Kick start data transfer by sending out http headers. */
|
|
evhtp_send_reply_start(req, EVHTP_RES_OK);
|
|
@@ -1030,7 +1030,7 @@ do_file_range (evhtp_request_t *req, Sea
|
|
/* Block any new request from this connection before finish
|
|
* handling this request.
|
|
*/
|
|
- evhtp_request_pause (req);
|
|
+ bufferevent_disable(bev, EV_READ);
|
|
|
|
/* Kick start data transfer by sending out http headers. */
|
|
evhtp_send_reply_start(req, EVHTP_RES_PARTIAL);
|
|
@@ -1100,7 +1100,7 @@ start_download_zip_file (evhtp_request_t
|
|
/* Block any new request from this connection before finish
|
|
* handling this request.
|
|
*/
|
|
- evhtp_request_pause (req);
|
|
+ bufferevent_disable(bev, EV_READ);
|
|
|
|
/* Kick start data transfer by sending out http headers. */
|
|
evhtp_send_reply_start(req, EVHTP_RES_OK);
|
|
@@ -1444,7 +1444,7 @@ do_block(evhtp_request_t *req, SeafRepo
|
|
/* Block any new request from this connection before finish
|
|
* handling this request.
|
|
*/
|
|
- evhtp_request_pause (req);
|
|
+ bufferevent_disable(bev, EV_READ);
|
|
|
|
/* Kick start data transfer by sending out http headers. */
|
|
evhtp_send_reply_start(req, EVHTP_RES_OK);
|
|
--- a/server/upload-file.c
|
|
+++ b/server/upload-file.c
|
|
@@ -2196,6 +2196,7 @@ out:
|
|
if (res != EVHTP_RES_OK) {
|
|
/* Don't receive any data before the connection is closed. */
|
|
//evhtp_request_pause (req);
|
|
+ // or for later evhtp bufferevent_disable(evhtp_request_get_bev(req), EV_READ);
|
|
|
|
/* Set keepalive to 0. This will cause evhtp to close the
|
|
* connection after sending the reply.
|
|
@@ -2513,6 +2514,7 @@ upload_headers_cb (evhtp_request_t *req,
|
|
err:
|
|
/* Don't receive any data before the connection is closed. */
|
|
//evhtp_request_pause (req);
|
|
+ // or for later evhtp bufferevent_disable(evhtp_request_get_bev(req), EV_READ);
|
|
|
|
/* Set keepalive to 0. This will cause evhtp to close the
|
|
* connection after sending the reply.
|