From: Willy Tarreau Date: Sat, 24 Nov 2012 10:12:13 +0000 (+0100) Subject: MINOR: connection: abort earlier when errors are detected X-Git-Tag: v1.5-dev14~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9a92cd5985e79e797f457bc825e88ee7d69c9bc4;p=thirdparty%2Fhaproxy.git MINOR: connection: abort earlier when errors are detected 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. --- diff --git a/src/connection.c b/src/connection.c index 9549dbae1b..38d4ca6289 100644 --- a/src/connection.c +++ b/src/connection.c @@ -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