From: William Lallemand Date: Tue, 28 Sep 2021 10:15:37 +0000 (+0200) Subject: MINOR: httpclient: test if started during stop_and_destroy() X-Git-Tag: v2.5-dev9~118 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b8b13703072ed113f7dcf999ecdb287cf940c979;p=thirdparty%2Fhaproxy.git MINOR: httpclient: test if started during stop_and_destroy() If the httpclient was never started, it is safe to destroy completely the httpclient. --- diff --git a/include/haproxy/http_client-t.h b/include/haproxy/http_client-t.h index df25de397e..fa0f8fbdd4 100644 --- a/include/haproxy/http_client-t.h +++ b/include/haproxy/http_client-t.h @@ -35,7 +35,8 @@ struct httpclient { #define HTTPCLIENT_FA_AUTOKILL 0x00000002 /* sets the applet to destroy the httpclient struct itself */ /* status (FS) */ -#define HTTPCLIENT_FS_ENDED 0x00010000 /* the httpclient is stopped */ +#define HTTPCLIENT_FS_STARTED 0x00010000 /* the httpclient was started */ +#define HTTPCLIENT_FS_ENDED 0x00020000 /* the httpclient is stopped */ /* States of the HTTP Client Appctx */ enum { diff --git a/src/http_client.c b/src/http_client.c index 6055a01cc3..24d8fbe3b9 100644 --- a/src/http_client.c +++ b/src/http_client.c @@ -390,6 +390,7 @@ struct appctx *httpclient_start(struct httpclient *hc) task_wakeup(s->task, TASK_WOKEN_INIT); hc->appctx = appctx; + hc->flags |= HTTPCLIENT_FS_STARTED; appctx->ctx.httpclient.ptr = hc; appctx->st0 = HTTPCLIENT_S_REQ; @@ -417,8 +418,8 @@ out: void httpclient_stop_and_destroy(struct httpclient *hc) { - /* The httpclient was already stopped, we can safely destroy it */ - if (hc->flags & HTTPCLIENT_FS_ENDED) { + /* The httpclient was already stopped or never started, we can safely destroy it */ + if (hc->flags & HTTPCLIENT_FS_ENDED || !(hc->flags & HTTPCLIENT_FS_STARTED)) { httpclient_destroy(hc); } else { /* if the client wasn't stopped, ask for a stop and destroy */