bsc_msc: Remove use_count from the subscriber connection

A channel will be released in case of
    * Errors via the clear_request callback...
    * no more transactions and operations are going on.

This means that if we do something without a transaction
the channel might be closed down right away. The bug fix
will be to create a transaction/operation.
diff --git a/openbsc/src/gsm_04_08.c b/openbsc/src/gsm_04_08.c
index e807052..c1b438e 100644
--- a/openbsc/src/gsm_04_08.c
+++ b/openbsc/src/gsm_04_08.c
@@ -109,13 +109,11 @@
 
 	talloc_free(conn->sec_operation);
 	conn->sec_operation = NULL;
-	put_subscr_con(conn);
+	msc_release_connection(conn);
 }
 
 static void allocate_security_operation(struct gsm_subscriber_connection *conn)
 {
-	use_subscr_con(conn)
-
 	conn->sec_operation = talloc_zero(tall_authciphop_ctx,
 	                                  struct gsm_security_operation);
 }
@@ -222,12 +220,13 @@
 	bsc_del_timer(&conn->loc_operation->updating_timer);
 	talloc_free(conn->loc_operation);
 	conn->loc_operation = 0;
-	put_subscr_con(conn);
+	msc_release_connection(conn);
 }
 
 static void allocate_loc_updating_req(struct gsm_subscriber_connection *conn)
 {
-	use_subscr_con(conn)
+	if (conn->loc_operation)
+		LOGP(DMM, LOGL_ERROR, "Connection already had operation.\n");
 	release_loc_updating_req(conn);
 
 	conn->loc_operation = talloc_zero(tall_locop_ctx,
@@ -263,7 +262,6 @@
 
 			/* try to close channel ASAP */
 			release_loc_updating_req(conn);
-			lchan_auto_release(conn->lchan);
 			break;
 
 		default:
@@ -285,6 +283,10 @@
 void gsm0408_clear_request(struct gsm_subscriber_connection* conn, uint32_t cause)
 {
 	struct gsm_trans *trans, *temp;
+
+	/* avoid someone issuing a clear */
+	conn->in_release = 1;
+
 	/*
 	 * Cancel any outstanding location updating request
 	 * operation taking place on the subscriber connection.
@@ -424,7 +426,6 @@
 
 	gsm0408_loc_upd_rej(conn, bts->network->reject_cause);
 	release_loc_updating_req(conn);
-	lchan_auto_release(lchan);
 }
 
 static void schedule_reject(struct gsm_subscriber_connection *conn)
@@ -710,7 +711,6 @@
 
 	DEBUGP(DMM, "-> CM SERVICE Reject cause: %d\n", value);
 	msg->lchan = conn->lchan;
-	use_subscr_con(conn);
 	return gsm48_conn_sendmsg(msg, conn, NULL);
 }
 
@@ -871,8 +871,6 @@
 	 * imagine an IMSI DETACH happening during an active call! */
 
 	/* subscriber is detached: should we release lchan? */
-	lchan_auto_release(msg->lchan);
-
 	return 0;
 }
 
@@ -1385,7 +1383,6 @@
 			/* Assign lchan */
 			if (!transt->conn) {
 				transt->conn = conn;
-				use_subscr_con(transt->conn);
 			}
 			/* send SETUP request to called party */
 			gsm48_cc_tx_setup(transt, &transt->cc.msg);
@@ -2289,9 +2286,6 @@
 		case GSM_CSTATE_RELEASE_REQ:
 			rc = mncc_recvmsg(trans->subscr->net, trans,
 					  MNCC_REL_CNF, &rel);
-			/* FIXME: in case of multiple calls, we can't simply
-			 * hang up here ! */
-			lchan_auto_release(msg->lchan);
 			break;
 		default:
 			rc = mncc_recvmsg(trans->subscr->net, trans,
@@ -2924,7 +2918,6 @@
 		}
 		/* Assign lchan */
 		trans->conn = conn;
-		use_subscr_con(trans->conn);
 		subscr_put(subscr);
 	}
 
@@ -3065,7 +3058,6 @@
 		}
 		/* Assign transaction */
 		trans->conn = conn;
-		use_subscr_con(trans->conn);
 	}
 
 	/* find function for current state and message */