mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-06 15:17:01 +02:00
[BUG] server check intervals must not be null
If server check interval is null, we might end up looping in process_srv_chk(). Prevent those values from being zero and add some control in process_srv_chk() against infinite loops.
This commit is contained in:
parent
c7bdf09f9f
commit
e38388033f
@ -1931,6 +1931,11 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int inv)
|
||||
file, linenum, *err, newsrv->id);
|
||||
return -1;
|
||||
}
|
||||
if (val <= 0) {
|
||||
Alert("parsing [%s:%d]: invalid value %d for argument '%s' of server %s.\n",
|
||||
file, linenum, val, args[cur_arg], newsrv->id);
|
||||
return -1;
|
||||
}
|
||||
newsrv->inter = val;
|
||||
cur_arg += 2;
|
||||
}
|
||||
@ -1941,6 +1946,11 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int inv)
|
||||
file, linenum, *err, newsrv->id);
|
||||
return -1;
|
||||
}
|
||||
if (val <= 0) {
|
||||
Alert("parsing [%s:%d]: invalid value %d for argument '%s' of server %s.\n",
|
||||
file, linenum, val, args[cur_arg], newsrv->id);
|
||||
return -1;
|
||||
}
|
||||
newsrv->fastinter = val;
|
||||
cur_arg += 2;
|
||||
}
|
||||
@ -1951,6 +1961,11 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int inv)
|
||||
file, linenum, *err, newsrv->id);
|
||||
return -1;
|
||||
}
|
||||
if (val <= 0) {
|
||||
Alert("parsing [%s:%d]: invalid value %d for argument '%s' of server %s.\n",
|
||||
file, linenum, val, args[cur_arg], newsrv->id);
|
||||
return -1;
|
||||
}
|
||||
newsrv->downinter = val;
|
||||
cur_arg += 2;
|
||||
}
|
||||
@ -1997,6 +2012,11 @@ int cfg_parse_listen(const char *file, int linenum, char **args, int inv)
|
||||
file, linenum, *err, newsrv->id);
|
||||
return -1;
|
||||
}
|
||||
if (val <= 0) {
|
||||
Alert("parsing [%s:%d]: invalid value %d for argument '%s' of server %s.\n",
|
||||
file, linenum, val, args[cur_arg], newsrv->id);
|
||||
return -1;
|
||||
}
|
||||
newsrv->slowstart = (val + 999) / 1000;
|
||||
cur_arg += 2;
|
||||
}
|
||||
|
@ -524,6 +524,7 @@ static int event_srv_chk_r(int fd)
|
||||
*/
|
||||
struct task *process_chk(struct task *t)
|
||||
{
|
||||
int attempts = 0;
|
||||
struct server *s = t->context;
|
||||
struct sockaddr_in sa;
|
||||
int fd;
|
||||
@ -532,6 +533,12 @@ struct task *process_chk(struct task *t)
|
||||
//fprintf(stderr, "process_chk: task=%p\n", t);
|
||||
|
||||
new_chk:
|
||||
if (attempts++ > 0) {
|
||||
/* we always fail to create a server, let's stop insisting... */
|
||||
while (tick_is_expired(t->expire, now_ms))
|
||||
t->expire = tick_add(t->expire, MS_TO_TICKS(s->inter));
|
||||
return t;
|
||||
}
|
||||
fd = s->curfd;
|
||||
if (fd < 0) { /* no check currently running */
|
||||
//fprintf(stderr, "process_chk: 2\n");
|
||||
|
Loading…
Reference in New Issue
Block a user