]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
[BUG] server timeout was not considered in some circumstances
authorWilly Tarreau <w@1wt.eu>
Mon, 11 Aug 2008 08:35:07 +0000 (10:35 +0200)
committerWilly Tarreau <w@1wt.eu>
Tue, 2 Sep 2008 09:00:03 +0000 (11:00 +0200)
Due to a copy-paste typo, the client timeout was refreshed instead
of the server's when waiting for server response. This means that
the server's timeout remained eternity.

(cherry picked from commit 9f1f24bb7fb8ebd6b43b5fee1bda0afbdbcb768e)

src/stream_sock.c

index 08cc65b65058c1262606301175e434e787c76cb2..8bfc55baa00a0c4ee54e1f0df699d1d5d561ac73 100644 (file)
@@ -174,7 +174,7 @@ int stream_sock_read(int fd) {
         * have at least read something.
         */
 
-       if (b->flags & BF_PARTIAL_READ) {
+       if (b->flags & BF_PARTIAL_READ && tv_isset(&b->rex)) {
                if (tv_add_ifset(&b->rex, &now, &b->rto))
                        goto out_wakeup;
        out_eternity:
@@ -330,13 +330,13 @@ int stream_sock_write(int fd) {
         * written something.
         */
 
-       if (b->flags & BF_PARTIAL_WRITE) {
+       if (b->flags & BF_PARTIAL_WRITE && tv_isset(&b->wex)) {
                if (tv_add_ifset(&b->wex, &now, &b->wto)) {
                        /* 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->flags & BF_SHUTR_STATUS) && tv_isset(&b->rex))
                                b->rex = b->wex;
                        goto out_wakeup;
                }