aboutsummaryrefslogtreecommitdiffstats
path: root/src/gprs_ms.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gprs_ms.c')
-rw-r--r--src/gprs_ms.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/gprs_ms.c b/src/gprs_ms.c
index 3e95103d..b9a1b76d 100644
--- a/src/gprs_ms.c
+++ b/src/gprs_ms.c
@@ -63,7 +63,8 @@ static int64_t now_msec()
void gprs_default_cb_ms_idle(struct GprsMs *ms)
{
- talloc_free(ms);
+ if (ms_is_idle(ms))
+ talloc_free(ms);
}
void gprs_default_cb_ms_active(struct GprsMs *ms)
@@ -111,6 +112,7 @@ struct GprsMs *ms_alloc(struct gprs_rlcmac_bts *bts)
talloc_set_destructor(ms, ms_talloc_destructor);
llist_add(&ms->list, &bts->ms_list);
+ bts_stat_item_inc(bts, STAT_MS_PRESENT);
ms->bts = bts;
ms->cb = gprs_default_cb;
@@ -147,6 +149,8 @@ struct GprsMs *ms_alloc(struct gprs_rlcmac_bts *bts)
if (!ms->ctrs)
goto free_ret;
+ ms_set_timeout(ms, osmo_tdef_get(bts->pcu->T_defs, -2030, OSMO_TDEF_S, -1));
+
return ms;
free_ret:
talloc_free(ms);
@@ -159,6 +163,7 @@ static int ms_talloc_destructor(struct GprsMs *ms)
LOGPMS(ms, DRLCMAC, LOGL_INFO, "Destroying MS object\n");
+ bts_stat_item_dec(ms->bts, STAT_MS_PRESENT);
llist_del(&ms->list);
ms_set_reserved_slots(ms, NULL, 0, 0);