this 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;
Show replies by date
On Monday 16 November 2009 18:52:31 Andreas.Eversberg wrote:
this 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.
I don't like this one. It is something one can do with a gdb script (help
commands), use the backtrace function and print the first stack, or in the
future with things like systemtap.
regards
holger