From: Willy Tarreau Date: Wed, 5 Aug 2015 19:47:23 +0000 (+0200) Subject: MEDIUM: stream-int: simplify si_alloc_conn() X-Git-Tag: v1.6-dev4~119 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=973a54235f94137dc6b21ee6ebc4a795ff24e17e;p=thirdparty%2Fhaproxy.git MEDIUM: stream-int: simplify si_alloc_conn() Since we now always call this function with the reuse parameter cleared, let's simplify the function's logic as it cannot return the existing connection anymore. The savings on this inline function are appreciable (240 bytes) : $ size haproxy.old haproxy.new text data bss dec hex filename 1020383 40816 36928 1098127 10c18f haproxy.old 1020143 40816 36928 1097887 10c09f haproxy.new --- diff --git a/include/proto/stream_interface.h b/include/proto/stream_interface.h index dac4c0a19c..449d5e6bc8 100644 --- a/include/proto/stream_interface.h +++ b/include/proto/stream_interface.h @@ -271,27 +271,15 @@ static inline void si_applet_stop_get(struct stream_interface *si) } /* Try to allocate a new connection and assign it to the interface. If - * a connection was previously allocated and the flag is set, - * it is returned unmodified. Otherwise it is reset. + * an endpoint was previously allocated, it is released first. The newly + * allocated connection is initialized, assigned to the stream interface, + * and returned. */ -/* Returns the stream interface's existing connection if one such already - * exists, or tries to allocate and initialize a new one which is then - * assigned to the stream interface. - */ -static inline struct connection *si_alloc_conn(struct stream_interface *si, int reuse) +static inline struct connection *si_alloc_conn(struct stream_interface *si) { struct connection *conn; - /* If we find a reusable connection, we return it, otherwise we start - * by releasing what we have (non-reusable conn or applet). - */ - if (si->end) { - conn = objt_conn(si->end); - if (conn && reuse) - return conn; - - si_release_endpoint(si); - } + si_release_endpoint(si); conn = conn_new(); if (conn) diff --git a/src/backend.c b/src/backend.c index a1c700765d..f8185d7fef 100644 --- a/src/backend.c +++ b/src/backend.c @@ -1051,7 +1051,7 @@ int connect_server(struct stream *s) } if (!reuse) - srv_conn = si_alloc_conn(&s->si[1], 0); + srv_conn = si_alloc_conn(&s->si[1]); if (!srv_conn) return SF_ERR_RESOURCE; diff --git a/src/hlua.c b/src/hlua.c index 6fe3797bc6..1c2938b856 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -2062,7 +2062,7 @@ __LJMP static int hlua_socket_connect(struct lua_State *L) ip = MAY_LJMP(luaL_checkstring(L, 2)); port = MAY_LJMP(luaL_checkinteger(L, 3)); - conn = si_alloc_conn(&socket->s->si[1], 0); + conn = si_alloc_conn(&socket->s->si[1]); if (!conn) WILL_LJMP(luaL_error(L, "connect: internal error")); diff --git a/src/proto_http.c b/src/proto_http.c index 18a9455c97..161939a374 100644 --- a/src/proto_http.c +++ b/src/proto_http.c @@ -4477,7 +4477,7 @@ int http_process_request(struct stream *s, struct channel *req, int an_bit) char *path; /* Note that for now we don't reuse existing proxy connections */ - if (unlikely((conn = si_alloc_conn(&s->si[1], 0)) == NULL)) { + if (unlikely((conn = si_alloc_conn(&s->si[1])) == NULL)) { txn->req.msg_state = HTTP_MSG_ERROR; txn->status = 500; req->analysers = 0;