ms: Use osmo_use_count to track references
Change-Id: Ib65629224e6bd5683bb9192ba4354e965e8d39ec
diff --git a/src/gprs_ms.h b/src/gprs_ms.h
index d976235..123db0e 100644
--- a/src/gprs_ms.h
+++ b/src/gprs_ms.h
@@ -31,6 +31,7 @@
#include <osmocom/core/timer.h>
#include <osmocom/core/linuxlist.h>
#include <osmocom/core/rate_ctr.h>
+#include <osmocom/core/use_count.h>
#include <osmocom/gsm/protocol/gsm_23_003.h>
#include <osmocom/gsm/gsm48.h>
@@ -84,7 +85,7 @@
struct osmo_timer_list llc_timer;
bool is_idle;
- int ref;
+ struct osmo_use_count use_count;
struct osmo_timer_list timer;
unsigned delay;
@@ -107,8 +108,6 @@
void ms_set_first_common_ts(struct GprsMs *ms, struct gprs_rlcmac_pdch *pdch);
void ms_set_reserved_slots(struct GprsMs *ms, struct gprs_rlcmac_trx *trx,
uint8_t ul_slots, uint8_t dl_slots);
-struct GprsMs *ms_ref(struct GprsMs *ms);
-void ms_unref(struct GprsMs *ms);
void ms_set_mode(struct GprsMs *ms, enum mcs_kind mode);
void ms_set_ms_class(struct GprsMs *ms, uint8_t ms_class_);
void ms_set_egprs_ms_class(struct GprsMs *ms, uint8_t ms_class_);
@@ -157,7 +156,9 @@
static inline bool ms_is_idle(const struct GprsMs *ms)
{
- return !ms->ul_tbf && !ms->dl_tbf && !ms->ref && llist_empty(&ms->old_tbfs);
+ return !ms->ul_tbf && !ms->dl_tbf &&
+ llist_empty(&ms->old_tbfs) &&
+ osmo_use_count_total(&ms->use_count) == 0;
}
static inline struct gprs_llc_queue *ms_llc_queue(struct GprsMs *ms)
@@ -250,6 +251,12 @@
return ms->current_trx;
}
+#define MS_USE_RELEASE_TIMER "release_timer"
+#define ms_ref(ms, use) \
+ OSMO_ASSERT(osmo_use_count_get_put(&(ms)->use_count, use, 1) == 0)
+#define ms_unref(ms, use) \
+ OSMO_ASSERT(osmo_use_count_get_put(&(ms)->use_count, use, -1) == 0)
+
#define LOGPMS(ms, category, level, fmt, args...) \
LOGP(category, level, "%s " fmt, ms_name(ms), ## args)