diff options
Diffstat (limited to 'openbsc/src/transaction.c')
-rw-r--r-- | openbsc/src/transaction.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/openbsc/src/transaction.c b/openbsc/src/transaction.c index 2f5681433..23dfe073d 100644 --- a/openbsc/src/transaction.c +++ b/openbsc/src/transaction.c @@ -23,7 +23,7 @@ #include <openbsc/gsm_data.h> #include <openbsc/mncc.h> #include <openbsc/debug.h> -#include <openbsc/talloc.h> +#include <osmocore/talloc.h> #include <openbsc/gsm_subscriber.h> #include <openbsc/gsm_04_08.h> #include <openbsc/mncc.h> @@ -120,7 +120,7 @@ int trans_assign_trans_id(struct gsm_subscriber *subscr, struct gsm_network *net = subscr->net; struct gsm_trans *trans; unsigned int used_tid_bitmask = 0; - int i; + int i, j, h; if (ti_flag) ti_flag = 0x8; @@ -134,9 +134,14 @@ int trans_assign_trans_id(struct gsm_subscriber *subscr, used_tid_bitmask |= (1 << trans->transaction_id); } + /* find a new one, trying to go in a 'circular' pattern */ + for (h = 6; h > 0; h--) + if (used_tid_bitmask & (1 << (h | ti_flag))) + break; for (i = 0; i < 7; i++) { - if ((used_tid_bitmask & (1 << (i | ti_flag))) == 0) - return i | ti_flag; + j = ((h + i) % 7) | ti_flag; + if ((used_tid_bitmask & (1 << j)) == 0) + return j; } return -1; |