]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: http-client: Try to send request body with headers if possible
authorChristopher Faulet <cfaulet@haproxy.com>
Tue, 22 Jul 2025 06:16:14 +0000 (08:16 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Thu, 24 Jul 2025 10:06:48 +0000 (12:06 +0200)
There is no reason to yield after sending the request headers, except if the
request was fully sent. If there is a payload, it is better to send it as
well. However, when the whole request was sent, we can leave the I/O handler.

src/http_client.c

index 4740933891568caf305c1d7e20817ea64a4b6c3e..b881383e7a98dc0492d7dc6153a4887c0f97259e 100644 (file)
@@ -564,13 +564,12 @@ void httpclient_applet_io_handler(struct appctx *appctx)
                                if (htx->flags & HTX_FL_EOM) { /* check if a body need to be added */
                                        appctx->st0 = HTTPCLIENT_S_RES_STLINE;
                                        se_fl_set(appctx->sedesc, SE_FL_EOI);
-                                       break;
+                                       goto out; /* we need to leave the IO handler once we wrote the request */
                                }
 
                                applet_have_more_data(appctx);
                                appctx->st0 = HTTPCLIENT_S_REQ_BODY;
-                               goto out; /* we need to leave the IO handler once we wrote the request */
-                               break;
+                               __fallthrough;
 
                        case HTTPCLIENT_S_REQ_BODY:
                                /* call the payload callback */
@@ -637,11 +636,11 @@ void httpclient_applet_io_handler(struct appctx *appctx)
                                if (htx->flags & HTX_FL_EOM) {
                                        appctx->st0 = HTTPCLIENT_S_RES_STLINE;
                                        se_fl_set(appctx->sedesc, SE_FL_EOI);
-                                       break;
+                                       goto out;  /* we need to leave the IO handler once we wrote the request */
                                }
 
                                applet_have_more_data(appctx);
-                               goto process_data; /* we need to leave the IO handler once we wrote the request */
+                               goto process_data;
 
                        case HTTPCLIENT_S_RES_STLINE:
                                /* in HTX mode, don't try to copy the stline