From 973a54235f94137dc6b21ee6ebc4a795ff24e17e Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Wed, 5 Aug 2015 21:47:23 +0200 Subject: [PATCH] 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 --- include/proto/stream_interface.h | 22 +++++----------------- src/backend.c | 2 +- src/hlua.c | 2 +- src/proto_http.c | 2 +- 4 files changed, 8 insertions(+), 20 deletions(-) diff --git a/include/proto/stream_interface.h b/include/proto/stream_interface.h index dac4c0a19..449d5e6bc 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 a1c700765..f8185d7fe 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 6fe3797bc..1c2938b85 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 18a9455c9..161939a37 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;