diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2010-12-27 22:43:28 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2010-12-28 00:38:10 +0100 |
commit | a665a9e0b282af03453b45853789866856673553 (patch) | |
tree | d3bb423146540665deb9f8a641f3829d6b763478 /openbsc/src/gsm_04_11.c | |
parent | dbe012a1ba3fdd304297c734c3f66fb67b6f2908 (diff) |
subscr: Make the subscr_put_channel work with the subscr
The active channel might or might not be gone when the transaction
has been released. Instead of passing an invalid subscriber conn
we will pass the subscr that is ref-counted and guranteed to be
valid at this point. subscr_put_channel could search the connections
for an active connection if that is ever needed.
Diffstat (limited to 'openbsc/src/gsm_04_11.c')
-rw-r--r-- | openbsc/src/gsm_04_11.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/openbsc/src/gsm_04_11.c b/openbsc/src/gsm_04_11.c index 25fe467d6..cf9356cb6 100644 --- a/openbsc/src/gsm_04_11.c +++ b/openbsc/src/gsm_04_11.c @@ -140,7 +140,7 @@ static void gsm411_release_conn(struct gsm_subscriber_connection *conn) if (!conn) return; - subscr_put_channel(conn); + subscr_put_channel(conn->subscr); } struct msgb *gsm411_msgb_alloc(void) @@ -1187,8 +1187,10 @@ void _gsm411_sms_trans_free(struct gsm_trans *trans) void gsm411_sapi_n_reject(struct gsm_subscriber_connection *conn) { + struct gsm_subscriber *subscr; struct gsm_trans *trans, *tmp; + subscr = subscr_get(conn->subscr); llist_for_each_entry_safe(trans, tmp, &conn->bts->network->trans_list, entry) if (trans->conn == conn) { struct gsm_sms *sms = trans->sms.sms; @@ -1203,6 +1205,7 @@ void gsm411_sapi_n_reject(struct gsm_subscriber_connection *conn) trans_free(trans); } - gsm411_release_conn(conn); + subscr_put_channel(subscr); + subscr_put(subscr); } |