From: Stephan Bosch Date: Tue, 20 Mar 2018 17:04:36 +0000 (+0100) Subject: lib-http: server: Allow resubmitting a response, as long as it is not sent yet. X-Git-Tag: 2.3.3.rc1~236 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7644d4ef63b8c1db35ed044f86aeeb98acf21fae;p=thirdparty%2Fdovecot%2Fcore.git lib-http: server: Allow resubmitting a response, as long as it is not sent yet. --- diff --git a/src/lib-http/http-server-request.c b/src/lib-http/http-server-request.c index c922bb42d8..597912151a 100644 --- a/src/lib-http/http-server-request.c +++ b/src/lib-http/http-server-request.c @@ -296,6 +296,7 @@ void http_server_request_submit_response(struct http_server_request *req) case HTTP_SERVER_REQUEST_STATE_QUEUED: case HTTP_SERVER_REQUEST_STATE_PAYLOAD_IN: case HTTP_SERVER_REQUEST_STATE_PROCESSING: + case HTTP_SERVER_REQUEST_STATE_SUBMITTED_RESPONSE: if (!http_server_request_is_complete(req)) { http_server_request_debug(req, "Not ready to respond"); req->state = HTTP_SERVER_REQUEST_STATE_SUBMITTED_RESPONSE; diff --git a/src/lib-http/http-server-response.c b/src/lib-http/http-server-response.c index 087e8e555a..4d5424a52c 100644 --- a/src/lib-http/http-server-response.c +++ b/src/lib-http/http-server-response.c @@ -66,6 +66,8 @@ http_server_response_create(struct http_server_request *req, { struct http_server_response *resp; + i_assert(req->state < HTTP_SERVER_REQUEST_STATE_SENT_RESPONSE); + if (req->response == NULL) { resp = req->response = p_new (req->pool, struct http_server_response, 1); @@ -74,7 +76,6 @@ http_server_response_create(struct http_server_request *req, start a new one (would usually be a failure response) */ resp = req->response; - i_assert(!resp->submitted); http_server_response_free(resp); i_zero(resp); }