Author: mikej Date: Wed Sep 3 14:29:19 2008 New Revision: 9420 Modified: freeswitch/trunk/libs/sofia-sip/.update freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_common.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.h Log: Wed Sep 3 13:55:22 EDT 2008 Pekka Pessi <first.last@nokia.com> * nua: using HAVE_MEMLEAK_LOG Logging nua_handle_ref() and nua_handle_unref(). Modified: freeswitch/trunk/libs/sofia-sip/.update ============================================================================== --- freeswitch/trunk/libs/sofia-sip/.update (original) +++ freeswitch/trunk/libs/sofia-sip/.update Wed Sep 3 14:29:19 2008 @@ -1 +1 @@ -Wed Sep 3 14:27:37 EDT 2008 +Wed Sep 3 14:29:03 EDT 2008 Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_common.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_common.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_common.c Wed Sep 3 14:29:19 2008 @@ -163,8 +163,47 @@ SU_DEBUG_0(("nh_destructor(%p)\n", (void *)nh)); } -#undef nua_handle_ref -#undef nua_handle_unref +#if HAVE_MEMLEAK_LOG + +nua_handle_t * +_nua_handle_ref_by(nua_handle_t *nh, + char const *file, unsigned line, + char const *function) +{ + if (nh) + SU_DEBUG_0(("%p - nua_handle_ref() => "MOD_ZU" by %s:%u: %s()\n", + nh, su_home_refcount((su_home_t *)nh) + 1, file, line, by)); + return (nua_handle_t *)su_home_ref((su_home_t *)nh); +} + +int +_nua_handle_unref_by(nua_handle_t *nh, + char const *file, unsigned line, + char const *function) +{ + if (nh) { + size_t refcount = su_home_refcount((su_home_t *)nh) - 1; + int freed = su_home_unref((su_home_t *)nh); + if (freed) refcount = 0; + SU_DEBUG_0(("%p - nua_handle_unref() => "MOD_ZU" by %s:%u: %s()\n", + nh, refcount, file, line, by)); + return freed; + } + + return 0; +} + +nua_handle_t *nua_handle_ref(nua_handle_t *nh) +{ + return _nua_handle_ref_by(nh, "<app>", 0, "<app>") +} + +int nua_handle_unref(nua_handle_t *nh) +{ + return _nua_handle_unref_by(nh, "<app>", 0, "<app>") +} + +#else /** Make a new reference to handle. * @@ -198,6 +237,8 @@ return su_home_unref(nh->nh_home); } +#endif + /** Generate an instance identifier. */ char const *nua_generate_instance_identifier(su_home_t *home) { Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.h ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.h (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.h Wed Sep 3 14:29:19 2008 @@ -103,37 +103,6 @@ TAG_IF((include) && (soa) && soa_is_remote_chat_active(soa) >= 0, \ SOATAG_ACTIVE_CHAT(soa_is_remote_chat_active(soa))) -#if HAVE_NUA_HANDLE_DEBUG - -#define nua_handle_ref(nh) nua_handle_ref_by((nh), __func__) -#define nua_handle_unref(nh) nua_handle_unref_by((nh), __func__) - -su_inline nua_handle_t *nua_handle_ref_by(nua_handle_t *nh, - char const *by) -{ - if (nh) - SU_DEBUG_0(("nua_handle_ref(%p) => "MOD_ZU" by %s\n", nh, - su_home_refcount((su_home_t *)nh) + 1, - by)); - return (nua_handle_t *)su_home_ref((su_home_t *)nh); -} - -su_inline int nua_handle_unref_by(nua_handle_t *nh, char const *by) -{ - if (nh) { - size_t refcount = su_home_refcount((su_home_t *)nh) - 1; - int freed = su_home_unref((su_home_t *)nh); - if (freed) refcount = 0; - SU_DEBUG_0(("nua_handle_unref(%p) => "MOD_ZU" by %s\n", - nh, refcount, by)); - return freed; - } - - return 0; -} - -#endif - /** @internal @brief NUA handle. * */ @@ -277,6 +246,20 @@ #define __func__ "nua" #endif +#if HAVE_MEMLEAK_LOG + +#define nua_handle_ref(nh) \ + _nua_handle_ref_by((nh), __FILE__, __LINE__, __func__) +#define nua_handle_unref(nh) \ + _nua_handle_unref_by((nh), __FILE__, __LINE__, __func__) + +nua_handle_t *_nua_handle_ref_by( + nua_handle_t *nh, char const *file, unsigned line, char const *by); +int _nua_handle_unref_by( + nua_handle_t *nh, char const *file, unsigned line, char const *by); + +#endif + su_inline nua_t *nua_stack_ref(nua_t *nua) { return (nua_t *)su_home_ref(nua->nua_home);