diff options
Diffstat (limited to 'src/common/bts.c')
-rw-r--r-- | src/common/bts.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/common/bts.c b/src/common/bts.c index 47339230..08a5e24e 100644 --- a/src/common/bts.c +++ b/src/common/bts.c @@ -216,8 +216,11 @@ int bts_agch_enqueue(struct gsm_bts *bts, struct msgb *msg) { struct gsm_bts_role_bts *btsb = bts_role_bts(bts); - /* FIXME: implement max queue length */ + if (btsb->agch_queue_count >= 30) + return -ENOMEM; + msgb_enqueue(&btsb->agch_queue, msg); + btsb->agch_queue_count++; return 0; } @@ -225,8 +228,11 @@ int bts_agch_enqueue(struct gsm_bts *bts, struct msgb *msg) struct msgb *bts_agch_dequeue(struct gsm_bts *bts) { struct gsm_bts_role_bts *btsb = bts_role_bts(bts); + struct msgb *msg = msgb_dequeue(&btsb->agch_queue); - return msgb_dequeue(&btsb->agch_queue); + if (msg) + btsb->agch_queue_count--; + return msg; } int bts_supports_cipher(struct gsm_bts_role_bts *bts, int rsl_cipher) |