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/transaction.c b/openbsc/src/transaction.c
index c7478d6..ffabdd3 100644
--- a/openbsc/src/transaction.c
+++ b/openbsc/src/transaction.c
@@ -95,9 +95,6 @@
break;
}
- if (trans->conn)
- put_subscr_con(trans->conn);
-
if (!trans->conn && trans->subscr && trans->subscr->net) {
/* Stop paging on all bts' */
paging_request_stop(NULL, trans->subscr, NULL);
@@ -108,6 +105,10 @@
llist_del(&trans->entry);
+ if (trans->conn)
+ msc_release_connection(trans->conn);
+
+
talloc_free(trans);
}
@@ -155,15 +156,17 @@
struct gsm_trans *trans;
int num = 0;
+ if (conn_old == conn_new) {
+ LOGP(DCC, LOGL_ERROR, "Exchanging transaction with itself.\n");
+ return;
+ }
+
llist_for_each_entry(trans, &net->trans_list, entry) {
if (trans->conn == conn_old) {
+ msc_release_connection(conn_old);
- /* drop old channel use count */
- put_subscr_con(conn_old);
/* assign new channel */
trans->conn = conn_new;
- /* bump new channel use count */
- use_subscr_con(conn_new);
num++;
}
}