]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
CLEANUP: connection: use conn_ctrl_ready() instead of checking the flag
authorWilly Tarreau <w@1wt.eu>
Thu, 23 Jan 2014 12:50:42 +0000 (13:50 +0100)
committerWilly Tarreau <w@1wt.eu>
Sat, 25 Jan 2014 23:42:31 +0000 (00:42 +0100)
It's easier and safer to rely on conn_ctrl_ready() everywhere than to
check the flag itself. It will also simplify adding extra checks later
if needed. Some useless controls for !ctrl have been removed, as the
CTRL_READY flag itself guarantees ctrl is set.

include/proto/connection.h
src/checks.c
src/connection.c
src/dumpstats.c
src/proto_http.c
src/proto_tcp.c
src/ssl_sock.c

index 0bec98e44d5448c07fc95c2a98178cda9d5284d8..97abe3fe3313e4169605a3a9411acfa4b2862e07 100644 (file)
@@ -50,7 +50,7 @@ static inline int conn_xprt_ready(struct connection *conn)
 }
 
 /* returns true is the control layer is ready */
-static inline int conn_ctrl_ready(struct connection *conn)
+static inline int conn_ctrl_ready(const struct connection *conn)
 {
        return (conn->flags & CO_FL_CTRL_READY);
 }
@@ -88,11 +88,12 @@ static inline void conn_xprt_close(struct connection *conn)
 
 /* Initializes the connection's control layer which essentially consists in
  * registering the file descriptor for polling and setting the CO_FL_CTRL_READY
- * flag.
+ * flag. The caller is responsible for ensuring that the control layer is
+ * already assigned to the connection prior to the call.
  */
 static inline void conn_ctrl_init(struct connection *conn)
 {
-       if (!(conn->flags & CO_FL_CTRL_READY)) {
+       if (!conn_ctrl_ready(conn)) {
                int fd = conn->t.sock.fd;
 
                fd_insert(fd);
@@ -137,7 +138,7 @@ static inline void conn_force_close(struct connection *conn)
        if ((conn->flags & CO_FL_XPRT_READY) && conn->xprt && conn->xprt->close)
                conn->xprt->close(conn);
 
-       if (conn->flags & CO_FL_CTRL_READY)
+       if (conn_ctrl_ready(conn))
                fd_delete(conn->t.sock.fd);
 
        conn->flags &= ~(CO_FL_XPRT_READY|CO_FL_CTRL_READY);
@@ -166,7 +167,7 @@ static inline void conn_refresh_polling_flags(struct connection *conn)
 {
        conn->flags &= ~(CO_FL_WAIT_ROOM | CO_FL_WAIT_DATA);
 
-       if ((conn->flags & CO_FL_CTRL_READY) && conn->ctrl) {
+       if (conn_ctrl_ready(conn)) {
                unsigned int flags = conn->flags & ~(CO_FL_CURR_RD_ENA | CO_FL_CURR_WR_ENA);
 
                if (fd_recv_active(conn->t.sock.fd))
@@ -395,7 +396,7 @@ static inline void conn_sock_read0(struct connection *c)
        /* we don't risk keeping ports unusable if we found the
         * zero from the other side.
         */
-       if (c->flags & CO_FL_CTRL_READY)
+       if (conn_ctrl_ready(c))
                fdtab[c->t.sock.fd].linger_risk = 0;
 }
 
@@ -484,7 +485,7 @@ static inline void conn_get_from_addr(struct connection *conn)
        if (conn->flags & CO_FL_ADDR_FROM_SET)
                return;
 
-       if (!(conn->flags & CO_FL_CTRL_READY) || !conn->ctrl || !conn->ctrl->get_src)
+       if (!conn_ctrl_ready(conn) || !conn->ctrl->get_src)
                return;
 
        if (conn->ctrl->get_src(conn->t.sock.fd, (struct sockaddr *)&conn->addr.from,
@@ -500,7 +501,7 @@ static inline void conn_get_to_addr(struct connection *conn)
        if (conn->flags & CO_FL_ADDR_TO_SET)
                return;
 
-       if (!(conn->flags & CO_FL_CTRL_READY) || !conn->ctrl || !conn->ctrl->get_dst)
+       if (!conn_ctrl_ready(conn) || !conn->ctrl->get_dst)
                return;
 
        if (conn->ctrl->get_dst(conn->t.sock.fd, (struct sockaddr *)&conn->addr.to,
index 82aec1a2d6798ebcc120f7ab134bf2d74d795639..70b5a2ee54fc20ad74c5c847970dc9019c3a48fd 100644 (file)
@@ -800,7 +800,7 @@ static int retrieve_errno_from_socket(struct connection *conn)
        if (conn->flags & CO_FL_ERROR && ((errno && errno != EAGAIN) || !conn->ctrl))
                return 1;
 
-       if (!(conn->flags & CO_FL_CTRL_READY) || !conn->ctrl)
+       if (!conn_ctrl_ready(conn))
                return 0;
 
        if (getsockopt(conn->t.sock.fd, SOL_SOCKET, SO_ERROR, &skerr, &lskerr) == 0)
index f85e775ffd4c6baeca73add53055f8212530767f..1483f1871ec9dc1ad579542411b116bc820f1897 100644 (file)
@@ -157,7 +157,7 @@ void conn_update_data_polling(struct connection *c)
 {
        unsigned int f = c->flags;
 
-       if (!(c->flags & CO_FL_CTRL_READY))
+       if (!conn_ctrl_ready(c))
                return;
 
        /* update read status if needed */
@@ -192,7 +192,7 @@ void conn_update_sock_polling(struct connection *c)
 {
        unsigned int f = c->flags;
 
-       if (!(c->flags & CO_FL_CTRL_READY))
+       if (!conn_ctrl_ready(c))
                return;
 
        /* update read status if needed */
@@ -248,7 +248,7 @@ int conn_recv_proxy(struct connection *conn, int flag)
        if (conn->flags & CO_FL_SOCK_RD_SH)
                goto fail;
 
-       if (!(conn->flags & CO_FL_CTRL_READY))
+       if (!conn_ctrl_ready(conn))
                goto fail;
 
        if (!fd_recv_ready(conn->t.sock.fd))
index 19d4dbdb2b797a767b23c52738ec39f52e3c2721..18aadf64087cdc762f37eee5efb12bfedf50ee57 100644 (file)
@@ -4286,7 +4286,7 @@ static void http_stats_io_handler(struct stream_interface *si)
 
 static inline const char *get_conn_ctrl_name(const struct connection *conn)
 {
-       if (!(conn->flags & CO_FL_CTRL_READY) || !conn->ctrl)
+       if (!conn_ctrl_ready(conn))
                return "NONE";
        return conn->ctrl->name;
 }
index bc5b0149aada530eda619aca99832c8aa8f1d4d4..95fb870eac40ac8ddb4137bea7254289b8c7b427 100644 (file)
@@ -2502,7 +2502,7 @@ int http_wait_for_request(struct session *s, struct channel *req, int an_bit)
                req->flags |= CF_READ_DONTWAIT; /* try to get back here ASAP */
                s->rep->flags &= ~CF_EXPECT_MORE; /* speed up sending a previous response */
 #ifdef TCP_QUICKACK
-               if (s->listener->options & LI_O_NOQUICKACK && req->buf->i && objt_conn(s->req->prod->end) && (__objt_conn(s->req->prod->end)->flags & CO_FL_CTRL_READY)) {
+               if (s->listener->options & LI_O_NOQUICKACK && req->buf->i && objt_conn(s->req->prod->end) && conn_ctrl_ready(__objt_conn(s->req->prod->end))) {
                        /* We need more data, we have to re-enable quick-ack in case we
                         * previously disabled it, otherwise we might cause the client
                         * to delay next data.
@@ -3031,13 +3031,13 @@ http_req_get_intercept_rule(struct proxy *px, struct list *rules, struct session
                        break;
 
                case HTTP_REQ_ACT_SET_TOS:
-                       if ((cli_conn = objt_conn(s->req->prod->end)) && (cli_conn->flags & CO_FL_CTRL_READY))
+                       if ((cli_conn = objt_conn(s->req->prod->end)) && conn_ctrl_ready(cli_conn))
                                inet_set_tos(cli_conn->t.sock.fd, cli_conn->addr.from, rule->arg.tos);
                        break;
 
                case HTTP_REQ_ACT_SET_MARK:
 #ifdef SO_MARK
-                       if ((cli_conn = objt_conn(s->req->prod->end)) && (cli_conn->flags & CO_FL_CTRL_READY))
+                       if ((cli_conn = objt_conn(s->req->prod->end)) && conn_ctrl_ready(cli_conn))
                                setsockopt(cli_conn->t.sock.fd, SOL_SOCKET, SO_MARK, &rule->arg.mark, sizeof(rule->arg.mark));
 #endif
                        break;
@@ -3117,13 +3117,13 @@ http_res_get_intercept_rule(struct proxy *px, struct list *rules, struct session
                        break;
 
                case HTTP_RES_ACT_SET_TOS:
-                       if ((cli_conn = objt_conn(s->req->prod->end)) && (cli_conn->flags & CO_FL_CTRL_READY))
+                       if ((cli_conn = objt_conn(s->req->prod->end)) && conn_ctrl_ready(cli_conn))
                                inet_set_tos(cli_conn->t.sock.fd, cli_conn->addr.from, rule->arg.tos);
                        break;
 
                case HTTP_RES_ACT_SET_MARK:
 #ifdef SO_MARK
-                       if ((cli_conn = objt_conn(s->req->prod->end)) && (cli_conn->flags & CO_FL_CTRL_READY))
+                       if ((cli_conn = objt_conn(s->req->prod->end)) && conn_ctrl_ready(cli_conn))
                                setsockopt(cli_conn->t.sock.fd, SOL_SOCKET, SO_MARK, &rule->arg.mark, sizeof(rule->arg.mark));
 #endif
                        break;
@@ -4004,7 +4004,7 @@ int http_process_request(struct session *s, struct channel *req, int an_bit)
                 * the client to delay further data.
                 */
                if ((s->listener->options & LI_O_NOQUICKACK) &&
-                   cli_conn && (cli_conn->flags & CO_FL_CTRL_READY) &&
+                   cli_conn && conn_ctrl_ready(cli_conn) &&
                    ((msg->flags & HTTP_MSGF_TE_CHNK) ||
                     (msg->body_len > req->buf->i - txn->req.eoh - 2)))
                        setsockopt(cli_conn->t.sock.fd, IPPROTO_TCP, TCP_QUICKACK, &one, sizeof(one));
index 79c7baf845ede2c95495627db5290af0c939cf4c..cd056786edab619ea86149560946bf7d226e9178 100644 (file)
@@ -626,7 +626,7 @@ int tcp_connect_probe(struct connection *conn)
        if (conn->flags & CO_FL_ERROR)
                return 0;
 
-       if (!(conn->flags & CO_FL_CTRL_READY))
+       if (!conn_ctrl_ready(conn))
                return 0;
 
        if (!(conn->flags & CO_FL_WAIT_L4_CONN))
index d30a8eb88c5472313c9de9937804381cbf128b0b..31f093982cf91eb2ca4c59d89b6d50e73d8694ac 100644 (file)
@@ -1097,7 +1097,7 @@ static int ssl_sock_init(struct connection *conn)
        if (conn->xprt_ctx)
                return 0;
 
-       if (!(conn->flags & CO_FL_CTRL_READY))
+       if (!conn_ctrl_ready(conn))
                return 0;
 
        if (global.maxsslconn && sslconns >= global.maxsslconn) {
@@ -1169,7 +1169,7 @@ int ssl_sock_handshake(struct connection *conn, unsigned int flag)
 {
        int ret;
 
-       if (!(conn->flags & CO_FL_CTRL_READY))
+       if (!conn_ctrl_ready(conn))
                return 0;
 
        if (!conn->xprt_ctx)