From: Willy Tarreau Date: Fri, 6 Jul 2012 12:29:45 +0000 (+0200) Subject: MAJOR: connection: replace direct I/O callbacks with the connection callback X-Git-Tag: v1.5-dev12~113 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d2274c6536856d1ad9d32e534cdc046ad5eeeba2;p=thirdparty%2Fhaproxy.git MAJOR: connection: replace direct I/O callbacks with the connection callback Almost all direct I/O callbacks have been changed to use the connection callback instead. Only the TCP connection validation remains. --- diff --git a/src/proto_tcp.c b/src/proto_tcp.c index 5c04fb4b79..7b69aadc40 100644 --- a/src/proto_tcp.c +++ b/src/proto_tcp.c @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -476,14 +477,13 @@ int tcp_connect_server(struct stream_interface *si) if ((si->ob->flags & BF_OUT_EMPTY) || si->send_proxy_ofs) { fdtab[fd].cb[DIR_RD].f = tcp_connect_read; fdtab[fd].cb[DIR_WR].f = tcp_connect_write; - fdtab[fd].iocb = NULL; } else { - fdtab[fd].cb[DIR_RD].f = si_data(si)->read; - fdtab[fd].cb[DIR_WR].f = si_data(si)->write; - fdtab[fd].iocb = NULL; + fdtab[fd].cb[DIR_RD].f = NULL; + fdtab[fd].cb[DIR_WR].f = NULL; } + fdtab[fd].iocb = conn_fd_handler; fd_insert(fd); EV_FD_SET(fd, DIR_WR); /* for connect status */ @@ -618,8 +618,8 @@ static int tcp_connect_write(int fd) /* The FD is ready now, we can hand the handlers to the socket layer * and forward the event there to start working on the socket. */ - fdtab[fd].cb[DIR_RD].f = si_data(si)->read; - fdtab[fd].cb[DIR_WR].f = si_data(si)->write; + fdtab[fd].cb[DIR_RD].f = NULL; + fdtab[fd].cb[DIR_WR].f = NULL; si->conn.flags &= ~CO_FL_WAIT_L4_CONN; si->exp = TICK_ETERNITY; return si_data(si)->write(fd); diff --git a/src/session.c b/src/session.c index 0b0c3dacbe..0e6c11e0df 100644 --- a/src/session.c +++ b/src/session.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -282,9 +283,9 @@ int session_accept(struct listener *l, int cfd, struct sockaddr_storage *addr) fd_insert(cfd); fdtab[cfd].owner = &s->si[0]; fdtab[cfd].flags = 0; - fdtab[cfd].cb[DIR_RD].f = si_data(&s->si[0])->read; - fdtab[cfd].cb[DIR_WR].f = si_data(&s->si[0])->write; - fdtab[cfd].iocb = NULL; + fdtab[cfd].cb[DIR_RD].f = NULL; + fdtab[cfd].cb[DIR_WR].f = NULL; + fdtab[cfd].iocb = conn_fd_handler; EV_FD_SET(cfd, DIR_RD); if (p->accept && (ret = p->accept(s)) <= 0) {