From b8b13703072ed113f7dcf999ecdb287cf940c979 Mon Sep 17 00:00:00 2001 From: William Lallemand Date: Tue, 28 Sep 2021 12:15:37 +0200 Subject: [PATCH] MINOR: httpclient: test if started during stop_and_destroy() If the httpclient was never started, it is safe to destroy completely the httpclient. --- include/haproxy/http_client-t.h | 3 ++- src/http_client.c | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/include/haproxy/http_client-t.h b/include/haproxy/http_client-t.h index df25de397..fa0f8fbdd 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 6055a01cc..24d8fbe3b 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 */