aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2023-03-10 16:25:33 +0100
committerPau Espin Pedrol <pespin@sysmocom.de>2023-03-10 16:25:38 +0100
commitd66c70208f38ebeefb6d2d15fcf1dbc7807cbbe0 (patch)
treec1bf8276ebbc958223afdb685a97f27c05fbc582
parentf031be91411deab550099317c75855f178519f6c (diff)
sccp_scpc.c: Simplify conn_create()
Drop local variable with no real use, dereference sccp_instance pointer once instead of potentially thousands of times. Change-Id: Iee333fb38d7a37877c37c1de9719a6b67d9e8ed3
-rw-r--r--src/sccp_scoc.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/src/sccp_scoc.c b/src/sccp_scoc.c
index 2430462..53cdf78 100644
--- a/src/sccp_scoc.c
+++ b/src/sccp_scoc.c
@@ -505,7 +505,7 @@ static struct sccp_connection *conn_create_id(struct osmo_sccp_user *user, uint3
/* Search for next free connection ID and allocate conn */
static struct sccp_connection *conn_create(struct osmo_sccp_user *user)
{
- uint32_t conn_id;
+ struct osmo_sccp_instance *sccp = user->inst;
/* SUA: RFC3868 sec 3.10.4:
* The source reference number is a 4 octet long integer.
@@ -520,13 +520,12 @@ static struct sccp_connection *conn_create(struct osmo_sccp_user *user)
*/
do {
/* Optimized modulo operation (% 0x00FFFFFE) using bitwise AND plus CMP: */
- user->inst->next_id = (user->inst->next_id + 1) & 0x00FFFFFF;
- if (OSMO_UNLIKELY(user->inst->next_id == 0x00FFFFFF))
- user->inst->next_id = 0;
- conn_id = user->inst->next_id;
- } while (conn_find_by_id(user->inst, conn_id));
+ sccp->next_id = (sccp->next_id + 1) & 0x00FFFFFF;
+ if (OSMO_UNLIKELY(sccp->next_id == 0x00FFFFFF))
+ sccp->next_id = 0;
+ } while (conn_find_by_id(sccp, sccp->next_id));
- return conn_create_id(user, conn_id);
+ return conn_create_id(user, sccp->next_id);
}
static void conn_opt_data_clear_cache(struct sccp_connection *conn)