]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
When we are at flush_max_threshold and the next bucket is a metadata (i.e. next-...
authorChristophe Jaillet <jailletc36@apache.org>
Sun, 21 May 2023 17:46:22 +0000 (17:46 +0000)
committerChristophe Jaillet <jailletc36@apache.org>
Sun, 21 May 2023 17:46:22 +0000 (17:46 +0000)
Follow-up to r1892450.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1909966 13f79535-47bb-0310-9956-ffa450edef68

server/core_filters.c

index bb0a8f4c16c3da7f28f8c55f6f918a60380bc644..0887603b9ab0a7c20b231438e0ac84da48fbf15f 100644 (file)
@@ -584,41 +584,41 @@ static apr_status_t send_brigade_nonblocking(apr_socket_t *s,
             if (!nvec) {
                 delete_meta_bucket(bucket);
             }
-            continue;
         }
-
-        /* Make sure that these new data fit in our iovec. */
-        if (nvec == ctx->nvec) {
-            if (nvec == NVEC_MAX) {
-                sock_nopush(s, 1);
-                rv = writev_nonblocking(s, bb, ctx, nbytes, nvec, c);
-                if (rv != APR_SUCCESS) {
-                    goto cleanup;
-                }
-                nbytes = 0;
-                nvec = 0;
-            }
-            else {
-                struct iovec *newvec;
-                apr_size_t newn = nvec * 2;
-                if (newn < NVEC_MIN) {
-                    newn = NVEC_MIN;
-                }
-                else if (newn > NVEC_MAX) {
-                    newn = NVEC_MAX;
+        else {
+            /* Make sure that these new data fit in our iovec. */
+            if (nvec == ctx->nvec) {
+                if (nvec == NVEC_MAX) {
+                    sock_nopush(s, 1);
+                    rv = writev_nonblocking(s, bb, ctx, nbytes, nvec, c);
+                    if (rv != APR_SUCCESS) {
+                        goto cleanup;
+                    }
+                    nbytes = 0;
+                    nvec = 0;
                 }
-                newvec = apr_palloc(c->pool, newn * sizeof(struct iovec));
-                if (nvec) {
-                    memcpy(newvec, ctx->vec, nvec * sizeof(struct iovec));
+                else {
+                    struct iovec *newvec;
+                    apr_size_t newn = nvec * 2;
+                    if (newn < NVEC_MIN) {
+                        newn = NVEC_MIN;
+                    }
+                    else if (newn > NVEC_MAX) {
+                        newn = NVEC_MAX;
+                    }
+                    newvec = apr_palloc(c->pool, newn * sizeof(struct iovec));
+                    if (nvec) {
+                        memcpy(newvec, ctx->vec, nvec * sizeof(struct iovec));
+                    }
+                    ctx->vec = newvec;
+                    ctx->nvec = newn;
                 }
-                ctx->vec = newvec;
-                ctx->nvec = newn;
             }
+            nbytes += length;
+            ctx->vec[nvec].iov_base = (void *)data;
+            ctx->vec[nvec].iov_len = length;
+            nvec++;
         }
-        nbytes += length;
-        ctx->vec[nvec].iov_base = (void *)data;
-        ctx->vec[nvec].iov_len = length;
-        nvec++;
 
         /* Flush above max threshold, unless the brigade still contains in
          * memory buckets which we want to try writing in the same pass (if