summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeels Hofmeyr <nhofmeyr@sysmocom.de>2016-05-04 15:36:56 +0200
committerNeels Hofmeyr <nhofmeyr@sysmocom.de>2016-05-04 16:06:59 +0200
commit3cda07754184867c49b7116f6dc000d03c0e33ea (patch)
tree6ea9544fe50aa9f66f0c80c78b4a676024a778f5
parentc3da27fa983272d25a1f7fe8b53fac6ebf2c7cbd (diff)
IuCS: properly clean up conn on release
Don't call msc_subscr_con_free() directly, instead use gsm0408_clear_request(), which properly cleans up all pending operations before freeing the connection.
-rw-r--r--openbsc/src/libmsc/iu_cs.c4
-rw-r--r--openbsc/src/osmo-cscn/iucs_ranap.c2
2 files changed, 3 insertions, 3 deletions
diff --git a/openbsc/src/libmsc/iu_cs.c b/openbsc/src/libmsc/iu_cs.c
index 38648341e..13f29d07c 100644
--- a/openbsc/src/libmsc/iu_cs.c
+++ b/openbsc/src/libmsc/iu_cs.c
@@ -125,7 +125,7 @@ int gsm0408_rcvmsg_iucs(struct gsm_network *network, struct msgb *msg,
" %s from LAC %d to %d\n",
subscr_name(conn->subscr), conn->lac, *lac);
/* Deallocate conn with previous LAC */
- msc_subscr_con_free(conn);
+ gsm0408_clear_request(conn, 0);
/* At this point we could be tolerant and allocate a new
* connection, but changing the LAC within the same connection
* is shifty. Rather cancel everything. */
@@ -161,7 +161,7 @@ int gsm0408_rcvmsg_iucs(struct gsm_network *network, struct msgb *msg,
rc = msc_compl_l3(conn, msg, 0);
if (rc != MSC_CONN_ACCEPT) {
- msc_subscr_con_free(conn);
+ gsm0408_clear_request(conn, 0);
rc = -1;
}
else
diff --git a/openbsc/src/osmo-cscn/iucs_ranap.c b/openbsc/src/osmo-cscn/iucs_ranap.c
index f88a55242..f34a2003e 100644
--- a/openbsc/src/osmo-cscn/iucs_ranap.c
+++ b/openbsc/src/osmo-cscn/iucs_ranap.c
@@ -91,7 +91,7 @@ int iucs_rx_ranap_event(struct gsm_network *network,
case IU_EVENT_LINK_INVALIDATED:
LOGP(DIUCS, LOGL_INFO, "IuCS release for %s\n",
subscr_name(conn->subscr));
- msc_subscr_con_free(conn);
+ gsm0408_clear_request(conn, 0);
return 0;
case IU_EVENT_SECURITY_MODE_COMPLETE: