]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: connection: abort earlier when errors are detected
authorWilly Tarreau <w@1wt.eu>
Sat, 24 Nov 2012 10:12:13 +0000 (11:12 +0100)
committerWilly Tarreau <w@1wt.eu>
Sat, 24 Nov 2012 10:12:13 +0000 (11:12 +0100)
If an uncaught CO_FL_ERROR flag on a connection is detected, we
immediately go to the wakeup function. This ensures that even if
an error is asynchronously delivered, we don't risk re-enabling
polling or doing unexpected things in the handshake handlers.

src/connection.c

index 9549dbae1bbe5fe37e2ffcd20c93a78f42ad20ea..38d4ca6289da2b495405db8f1b792c5621e2ba8f 100644 (file)
@@ -50,6 +50,10 @@ int conn_fd_handler(int fd)
         * more easily detect an EAGAIN condition from anywhere.
         */
        flags = conn->flags &= ~(CO_FL_WAIT_DATA|CO_FL_WAIT_ROOM|CO_FL_WAIT_RD|CO_FL_WAIT_WR);
+       flags &= ~CO_FL_ERROR; /* ensure to call the wake handler upon error */
+
+       if (unlikely(conn->flags & CO_FL_ERROR))
+               goto leave;
 
  process_handshake:
        /* The handshake callbacks are called in sequence. If either of them is