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 */