mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-21 22:01:31 +02:00
[BUG] client timeout incorrectly rearmed while waiting for server
Client timeout could be refreshed in stream_sock_*, but this is undesired when the timeout is already set to eternity. The effect is that a session could still be aborted if client timeout was smaller than server timeout. A second effect is that sessions expired on the server side would expire with "cD" flags. The fix consists in not updating it if it was not previously set. A cleaner method might consist in updating the buffer timeout. This is probably what will be done later when the state machines only deal with the buffers.
This commit is contained in:
parent
ce09c52187
commit
9f1f24bb7f
@ -2695,7 +2695,7 @@ int process_srv(struct session *t)
|
||||
int conn_err;
|
||||
|
||||
DPRINTF(stderr,"process_srv: c=%s s=%s set(r,w)=%d,%d exp(r,w)=%u,%u\n",
|
||||
cli_stnames[c], srv_stnames[s],
|
||||
cli_stnames[t->cli_state], srv_stnames[t->srv_state],
|
||||
EV_FD_ISSET(t->srv_fd, DIR_RD), EV_FD_ISSET(t->srv_fd, DIR_WR),
|
||||
rep->rex, req->wex);
|
||||
|
||||
|
@ -217,7 +217,7 @@ int stream_sock_read(int fd) {
|
||||
* have at least read something.
|
||||
*/
|
||||
|
||||
if (b->flags & BF_PARTIAL_READ)
|
||||
if (b->rex && b->flags & BF_PARTIAL_READ)
|
||||
b->rex = tick_add_ifset(now_ms, b->rto);
|
||||
|
||||
out_wakeup:
|
||||
@ -373,14 +373,14 @@ int stream_sock_write(int fd) {
|
||||
* written something.
|
||||
*/
|
||||
|
||||
if (b->flags & BF_PARTIAL_WRITE) {
|
||||
if (b->wex && b->flags & BF_PARTIAL_WRITE) {
|
||||
b->wex = tick_add_ifset(now_ms, b->wto);
|
||||
if (b->wex) {
|
||||
/* FIXME: to prevent the client from expiring read timeouts during writes,
|
||||
* we refresh it. A solution would be to merge read+write timeouts into a
|
||||
* unique one, although that needs some study particularly on full-duplex
|
||||
* TCP connections. */
|
||||
if (!(b->flags & BF_SHUTR_STATUS))
|
||||
if (b->rex && !(b->flags & BF_SHUTR_STATUS))
|
||||
b->rex = b->wex;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user