aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libmsc/gsm_04_08.c13
-rw-r--r--src/libmsc/osmo_msc.c2
2 files changed, 15 insertions, 0 deletions
diff --git a/src/libmsc/gsm_04_08.c b/src/libmsc/gsm_04_08.c
index ea0aedf0a..e504925a5 100644
--- a/src/libmsc/gsm_04_08.c
+++ b/src/libmsc/gsm_04_08.c
@@ -3017,6 +3017,19 @@ static int _gsm48_lchan_modify_error(struct gsm_trans *trans, void *arg)
return 0;
}
+void gsm48_lchan_modify_error(struct gsm_subscriber_connection *conn)
+{
+ struct gsm_network *net = conn->lchan->ts->trx->bts->network;
+ struct gsm_trans *trans, *trans2;
+
+ llist_for_each_entry_safe(trans, trans2, &net->trans_list, entry) {
+ if (trans->protocol != GSM48_PDISC_CC)
+ continue;
+ if (trans->conn == conn)
+ _gsm48_lchan_modify_error(trans, NULL);
+ }
+}
+
static int _gsm48_lchan_modify(struct gsm_trans *trans, void *arg)
{
struct gsm_bts *bts = trans->conn->bts;
diff --git a/src/libmsc/osmo_msc.c b/src/libmsc/osmo_msc.c
index 31b72b925..2b1655905 100644
--- a/src/libmsc/osmo_msc.c
+++ b/src/libmsc/osmo_msc.c
@@ -76,6 +76,8 @@ static void msc_assign_compl(struct gsm_subscriber_connection *conn,
static void msc_assign_fail(struct gsm_subscriber_connection *conn,
uint8_t cause, uint8_t *rr_cause)
{
+ /* release call transactions */
+ gsm48_lchan_modify_error(conn);
}
static void msc_classmark_chg(struct gsm_subscriber_connection *conn,