diff --git a/src/server.c b/src/server.c index 23b6322bf..2cf2ac34b 100644 --- a/src/server.c +++ b/src/server.c @@ -2978,6 +2978,19 @@ void srv_settings_cpy(struct server *srv, const struct server *src, int srv_tmpl srv->check.alpn_len = src->check.alpn_len; } } + if (src->check.tcpcheck && src->check.tcpcheck->healthcheck) { + struct tcpcheck *tcpcheck = NULL; + + tcpcheck = calloc(1, sizeof(*tcpcheck)); + if (tcpcheck) { + LIST_INIT(&tcpcheck->preset_vars); + tcpcheck->healthcheck = strdup(src->check.tcpcheck->healthcheck); + if (tcpcheck->healthcheck == NULL) + ha_free(&tcpcheck); + } + if (tcpcheck) + srv->check.tcpcheck = tcpcheck; + } if (!(srv->flags & SRV_F_RHTTP)) srv->check.reuse_pool = src->check.reuse_pool; diff --git a/src/tcpcheck.c b/src/tcpcheck.c index a1ee85f4d..4d01f2f3b 100644 --- a/src/tcpcheck.c +++ b/src/tcpcheck.c @@ -5970,7 +5970,7 @@ static int srv_parse_healthcheck(char **args, int *cur_arg, struct proxy *curpx, goto out; } - if (srv->check.tcpcheck->healthcheck) { + if (srv->check.tcpcheck && srv->check.tcpcheck->healthcheck) { /* a healthcheck section was already defined. Replace it */ ha_free(&srv->check.tcpcheck->healthcheck); }