MINOR: frontend: don't retrieve ALPN on the critical path
It's pointless to read it on each and every accept(), as we only need
it for reporting in debugging mode a few lines later. Let's move this
part to the relevant block.
diff --git a/src/frontend.c b/src/frontend.c
index be40e5f..e03e099 100644
--- a/src/frontend.c
+++ b/src/frontend.c
@@ -56,14 +56,6 @@
struct connection *conn = objt_conn(sess->origin);
struct listener *l = sess->listener;
struct proxy *fe = sess->fe;
- const char *alpn_str = NULL;
- int alpn_len;
-
- /* check if we're in HTTP mode, directly connected to the connection,
- * and with ALPN advertising H2.
- */
- if (conn && conn->owner == &s->si[0])
- conn_get_alpn(conn, &alpn_str, &alpn_len);
if ((fe->mode == PR_MODE_TCP || fe->mode == PR_MODE_HTTP)
&& (!LIST_ISEMPTY(&fe->logsrvs))) {
@@ -102,13 +94,19 @@
(!(global.mode & MODE_QUIET) || (global.mode & MODE_VERBOSE)))) {
char pn[INET6_ADDRSTRLEN];
char alpn[16] = "<none>";
+ const char *alpn_str = NULL;
+ int alpn_len;
conn_get_from_addr(conn);
- if (alpn_str) {
- int len = MIN(alpn_len, sizeof(alpn) - 1);
- memcpy(alpn, alpn_str, len);
- alpn[len] = 0;
+ /* try to report the ALPN value when available (also works for NPN) */
+
+ if (conn && conn->owner == &s->si[0]) {
+ if (conn_get_alpn(conn, &alpn_str, &alpn_len) && alpn_str) {
+ int len = MIN(alpn_len, sizeof(alpn) - 1);
+ memcpy(alpn, alpn_str, len);
+ alpn[len] = 0;
+ }
}
switch (addr_to_str(&conn->addr.from, pn, sizeof(pn))) {