subscr: Remember if we need to call subscr_put_channel at the end.

Remember if this channel got opened due a paging response and in
that case when we close it down we will call subscr_put_channel
that will try to page the subscriber again. This highlights the
lack of a good subscriber management in the MSC code.
diff --git a/openbsc/include/openbsc/gsm_data.h b/openbsc/include/openbsc/gsm_data.h
index 59599ab..fc02f58 100644
--- a/openbsc/include/openbsc/gsm_data.h
+++ b/openbsc/include/openbsc/gsm_data.h
@@ -252,6 +252,7 @@
 
 	/* 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 94a6209..ea11a71 100644
--- a/openbsc/src/gsm_04_08.c
+++ b/openbsc/src/gsm_04_08.c
@@ -1436,6 +1436,7 @@
 			/* 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 beb90e5..8c86dcc 100644
--- a/openbsc/src/osmo_msc.c
+++ b/openbsc/src/osmo_msc.c
@@ -38,6 +38,10 @@
 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 @@
 	/* 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);
 }