This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/OpenBSC@lists.osmocom.org/.
Andreas.Eversberg Andreas.Eversberg at versatel.dethis patch will give more detailed debug information about subscriber usage. when subcriber structure is allocated, it will be shown on debug output. subscr_get() and subscr_put() debug will also show the calling function for better understanding. diff --git a/openbsc/include/openbsc/gsm_subscriber.h b/openbsc/include/openbsc/gsm_subscriber.h index d612ed5..02e193a 100644 --- a/openbsc/include/openbsc/gsm_subscriber.h +++ b/openbsc/include/openbsc/gsm_subscriber.h @@ -71,8 +71,10 @@ enum gsm_subscriber_update_reason { GSM_SUBSCRIBER_UPDATE_EQUIPMENT, }; -struct gsm_subscriber *subscr_get(struct gsm_subscriber *subscr); -struct gsm_subscriber *subscr_put(struct gsm_subscriber *subscr); +#define subscr_get(subscr) _subscr_get(__FUNCTION__, subscr) +struct gsm_subscriber *_subscr_get(const char *func, struct gsm_subscriber *subscr); +#define subscr_put(subscr) _subscr_put(__FUNCTION__, subscr) +struct gsm_subscriber *_subscr_put(const char *func, struct gsm_subscriber *subscr); struct gsm_subscriber *subscr_get_by_tmsi(struct gsm_network *net, u_int32_t tmsi); struct gsm_subscriber *subscr_get_by_imsi(struct gsm_network *net, @@ -87,7 +89,8 @@ void subscr_get_channel(struct gsm_subscriber *subscr, int type, gsm_cbfn *cbfn, void *param); /* internal */ -struct gsm_subscriber *subscr_alloc(void); +#define subscr_alloc() _subscr_alloc(__FUNCTION__) +struct gsm_subscriber *_subscr_alloc(const char *func); extern struct llist_head active_subscribers; #endif /* _GSM_SUBSCR_H */ diff --git a/openbsc/src/gsm_subscriber_base.c b/openbsc/src/gsm_subscriber_base.c index bcf55d1..7fe2f21 100644 --- a/openbsc/src/gsm_subscriber_base.c +++ b/openbsc/src/gsm_subscriber_base.c @@ -113,7 +113,7 @@ static void subscr_send_paging_request(struct gsm_subscriber *subscr) } } -struct gsm_subscriber *subscr_alloc(void) +struct gsm_subscriber *_subscr_alloc(const char *func) { struct gsm_subscriber *s; @@ -123,6 +123,8 @@ struct gsm_subscriber *subscr_alloc(void) memset(s, 0, sizeof(*s)); llist_add_tail(&s->entry, &active_subscribers); + DEBUGP(DCC, "(from %s) new subscr allocated, setting usage to: 1\n", + func); s->use_count = 1; s->tmsi = GSM_RESERVED_TMSI; @@ -137,19 +139,19 @@ static void subscr_free(struct gsm_subscriber *subscr) talloc_free(subscr); } -struct gsm_subscriber *subscr_get(struct gsm_subscriber *subscr) +struct gsm_subscriber *_subscr_get(const char *func, struct gsm_subscriber *subscr) { subscr->use_count++; - DEBUGP(DCC, "subscr %s usage increases usage to: %d\n", - subscr->extension, subscr->use_count); + DEBUGP(DCC, "(from %s) subscr %s usage increases usage to: %d\n", + func, subscr->extension, subscr->use_count); return subscr; } -struct gsm_subscriber *subscr_put(struct gsm_subscriber *subscr) +struct gsm_subscriber *_subscr_put(const char *func, struct gsm_subscriber *subscr) { subscr->use_count--; - DEBUGP(DCC, "subscr %s usage decreased usage to: %d\n", - subscr->extension, subscr->use_count); + DEBUGP(DCC, "(from %s) subscr %s usage decreased usage to: %d\n", + func, subscr->extension, subscr->use_count); if (subscr->use_count <= 0) subscr_free(subscr); return NULL;