aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--openbsc/include/openbsc/gsm_data.h1
-rw-r--r--openbsc/src/gsm_04_08.c1
-rw-r--r--openbsc/src/osmo_msc.c8
3 files changed, 10 insertions, 0 deletions
diff --git a/openbsc/include/openbsc/gsm_data.h b/openbsc/include/openbsc/gsm_data.h
index 59599ab03..fc02f58de 100644
--- a/openbsc/include/openbsc/gsm_data.h
+++ b/openbsc/include/openbsc/gsm_data.h
@@ -252,6 +252,7 @@ struct gsm_subscriber_connection {
/* Are we part of a special "silent" call */
int silent_call;
+ int put_channel;
/* bsc structures */
struct osmo_bsc_sccp_con *sccp_con;
diff --git a/openbsc/src/gsm_04_08.c b/openbsc/src/gsm_04_08.c
index 94a620934..ea11a7109 100644
--- a/openbsc/src/gsm_04_08.c
+++ b/openbsc/src/gsm_04_08.c
@@ -1436,6 +1436,7 @@ static int setup_trig_pag_evt(unsigned int hooknum, unsigned int event,
/* Assign lchan */
if (!transt->conn) {
transt->conn = conn;
+ conn->put_channel = 1;
}
/* send SETUP request to called party */
gsm48_cc_tx_setup(transt, &transt->cc.msg);
diff --git a/openbsc/src/osmo_msc.c b/openbsc/src/osmo_msc.c
index beb90e5b1..8c86dcc8e 100644
--- a/openbsc/src/osmo_msc.c
+++ b/openbsc/src/osmo_msc.c
@@ -38,6 +38,10 @@ static void msc_sapi_n_reject(struct gsm_subscriber_connection *conn, int dlci)
static int msc_clear_request(struct gsm_subscriber_connection *conn, uint32_t cause)
{
gsm0408_clear_request(conn, cause);
+ if (conn->put_channel) {
+ conn->put_channel = 0;
+ subscr_put_channel(conn->subscr);
+ }
return 1;
}
@@ -92,5 +96,9 @@ void msc_release_connection(struct gsm_subscriber_connection *conn)
/* no more connections, asking to release the channel */
conn->in_release = 1;
gsm0808_clear(conn);
+ if (conn->put_channel) {
+ conn->put_channel = 0;
+ subscr_put_channel(conn->subscr);
+ }
subscr_con_free(conn);
}