CLEANUP: checks: simplify the loop processing of tcp-checks
There is some unobvious redundancy between the various ways we can leave the loop. Some of them can be factored out. So now we leave the loop when we can't go further, whether it's caused by reaching the end of the rules or by a blocking I/O.
This commit is contained in:
parent
53c5a049e1
commit
263013d031
26
src/checks.c
26
src/checks.c
|
@ -2493,8 +2493,10 @@ static void tcpcheck_main(struct connection *conn)
|
||||||
__conn_data_stop_both(conn);
|
__conn_data_stop_both(conn);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
/* we have to try to flush the output buffer before reading, at the end,
|
/* We have to try to flush the output buffer before reading, at
|
||||||
* or if we're about to send a string that does not fit in the remaining space.
|
* the end, or if we're about to send a string that does not fit
|
||||||
|
* in the remaining space. That explains why we break out of the
|
||||||
|
* loop after this control.
|
||||||
*/
|
*/
|
||||||
if (check->bo->o &&
|
if (check->bo->o &&
|
||||||
(&check->current_step->list == head ||
|
(&check->current_step->list == head ||
|
||||||
|
@ -2507,16 +2509,12 @@ static void tcpcheck_main(struct connection *conn)
|
||||||
__conn_data_stop_both(conn);
|
__conn_data_stop_both(conn);
|
||||||
goto out_end_tcpcheck;
|
goto out_end_tcpcheck;
|
||||||
}
|
}
|
||||||
goto out_need_io;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* did we reach the end ? If so, let's check that everything was sent */
|
if (&check->current_step->list == head)
|
||||||
if (&check->current_step->list == head) {
|
|
||||||
if (check->bo->o)
|
|
||||||
goto out_need_io;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
/* have 'next' point to the next rule or NULL if we're on the
|
/* have 'next' point to the next rule or NULL if we're on the
|
||||||
* last one, connect() needs this.
|
* last one, connect() needs this.
|
||||||
|
@ -2717,7 +2715,7 @@ static void tcpcheck_main(struct connection *conn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
goto out_need_io;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* mark the step as started */
|
/* mark the step as started */
|
||||||
|
@ -2836,10 +2834,14 @@ static void tcpcheck_main(struct connection *conn)
|
||||||
} /* end expect */
|
} /* end expect */
|
||||||
} /* end loop over double chained step list */
|
} /* end loop over double chained step list */
|
||||||
|
|
||||||
set_server_check_status(check, HCHK_STATUS_L7OKD, "(tcp-check)");
|
/* We're waiting for some I/O to complete, we've reached the end of the
|
||||||
goto out_end_tcpcheck;
|
* rules, or both. Do what we have to do, otherwise we're done.
|
||||||
|
*/
|
||||||
|
if (&check->current_step->list == head && !check->bo->o) {
|
||||||
|
set_server_check_status(check, HCHK_STATUS_L7OKD, "(tcp-check)");
|
||||||
|
goto out_end_tcpcheck;
|
||||||
|
}
|
||||||
|
|
||||||
out_need_io:
|
|
||||||
/* warning, current_step may now point to the head */
|
/* warning, current_step may now point to the head */
|
||||||
if (check->bo->o)
|
if (check->bo->o)
|
||||||
__conn_data_want_send(conn);
|
__conn_data_want_send(conn);
|
||||||
|
|
Loading…
Reference in New Issue