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
This commit is contained in:
Willy Tarreau 2015-08-05 21:47:23 +02:00
parent c12b5e663d
commit 973a54235f
4 changed files with 8 additions and 20 deletions

View File

@ -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 /* Try to allocate a new connection and assign it to the interface. If
* a connection was previously allocated and the <reuse> flag is set, * an endpoint was previously allocated, it is released first. The newly
* it is returned unmodified. Otherwise it is reset. * allocated connection is initialized, assigned to the stream interface,
* and returned.
*/ */
/* Returns the stream interface's existing connection if one such already static inline struct connection *si_alloc_conn(struct stream_interface *si)
* 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)
{ {
struct connection *conn; 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(); conn = conn_new();
if (conn) if (conn)

View File

@ -1051,7 +1051,7 @@ int connect_server(struct stream *s)
} }
if (!reuse) if (!reuse)
srv_conn = si_alloc_conn(&s->si[1], 0); srv_conn = si_alloc_conn(&s->si[1]);
if (!srv_conn) if (!srv_conn)
return SF_ERR_RESOURCE; return SF_ERR_RESOURCE;

View File

@ -2062,7 +2062,7 @@ __LJMP static int hlua_socket_connect(struct lua_State *L)
ip = MAY_LJMP(luaL_checkstring(L, 2)); ip = MAY_LJMP(luaL_checkstring(L, 2));
port = MAY_LJMP(luaL_checkinteger(L, 3)); 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) if (!conn)
WILL_LJMP(luaL_error(L, "connect: internal error")); WILL_LJMP(luaL_error(L, "connect: internal error"));

View File

@ -4477,7 +4477,7 @@ int http_process_request(struct stream *s, struct channel *req, int an_bit)
char *path; char *path;
/* Note that for now we don't reuse existing proxy connections */ /* 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->req.msg_state = HTTP_MSG_ERROR;
txn->status = 500; txn->status = 500;
req->analysers = 0; req->analysers = 0;