]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-http: server: Allow resubmitting a response, as long as it is not sent yet.
authorStephan Bosch <stephan.bosch@dovecot.fi>
Tue, 20 Mar 2018 17:04:36 +0000 (18:04 +0100)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Mon, 30 Jul 2018 06:51:41 +0000 (09:51 +0300)
src/lib-http/http-server-request.c
src/lib-http/http-server-response.c

index c922bb42d84df5cac9d785ecede2fb9d0cbc01db..597912151a5b37bbd2155d1b1713dc723cb47f0b 100644 (file)
@@ -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;
index 087e8e555a81b229738075bf7865373d736b2a9d..4d5424a52c11022881ccf8eba1ff4101e22ed752 100644 (file)
@@ -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);
        }