From 5d9004bc9b6f486fff032aaa2a6cc10fca180de3 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Fri, 4 Mar 2016 14:39:22 +0100 Subject: gsm_subscriber_connection: further split between BSC and MSC Move some Iu/A members into the MSC #ifdef. Have separate allocate and free functions for the two scopes. --- openbsc/src/libmsc/gsm_subscriber.c | 28 ++++++++++++++++++++++++++++ openbsc/src/libmsc/iu_cs.c | 2 +- openbsc/src/libmsc/osmo_msc.c | 3 +-- 3 files changed, 30 insertions(+), 3 deletions(-) (limited to 'openbsc/src/libmsc') diff --git a/openbsc/src/libmsc/gsm_subscriber.c b/openbsc/src/libmsc/gsm_subscriber.c index 9342a2972..7489b169f 100644 --- a/openbsc/src/libmsc/gsm_subscriber.c +++ b/openbsc/src/libmsc/gsm_subscriber.c @@ -370,3 +370,31 @@ void subscr_expire(struct gsm_subscriber_group *sgrp) { db_subscriber_expire(sgrp->net, subscr_expire_callback); } + +struct gsm_subscriber_connection *msc_subscr_con_allocate(struct gsm_network *network) +{ + struct gsm_subscriber_connection *conn; + + conn = talloc_zero(network, struct gsm_subscriber_connection); + if (!conn) + return NULL; + + conn->network = network; + llist_add_tail(&conn->entry, &network->subscr_conns); + return conn; +} + +void msc_subscr_con_free(struct gsm_subscriber_connection *conn) +{ + if (!conn) + return; + + + if (conn->subscr) { + subscr_put(conn->subscr); + conn->subscr = NULL; + } + + llist_del(&conn->entry); + talloc_free(conn); +} diff --git a/openbsc/src/libmsc/iu_cs.c b/openbsc/src/libmsc/iu_cs.c index 646235f7c..2aabf200f 100644 --- a/openbsc/src/libmsc/iu_cs.c +++ b/openbsc/src/libmsc/iu_cs.c @@ -95,7 +95,7 @@ int gsm0408_rcvmsg_iucs(struct gsm_network *network, struct msgb *msg) rc = msc_compl_l3(conn, msg, 0); if (rc != MSC_CONN_ACCEPT) { - subscr_con_free(conn); + msc_subscr_con_free(conn); rc = -1; } else diff --git a/openbsc/src/libmsc/osmo_msc.c b/openbsc/src/libmsc/osmo_msc.c index 8618b00f7..0e91512d7 100644 --- a/openbsc/src/libmsc/osmo_msc.c +++ b/openbsc/src/libmsc/osmo_msc.c @@ -151,6 +151,5 @@ void msc_release_connection(struct gsm_subscriber_connection *conn) subscr_update_expire_lu(conn->network, conn->subscr); conn->in_release = 1; - gsm0808_clear(conn); - subscr_con_free(conn); + msc_subscr_con_free(conn); } -- cgit v1.2.3