res_pjsip: Add REF_DEBUG info to module references.

This provides better information to REF_DEBUG log for troubleshooting
when the system is unable to unload res_pjsip.so during shutdown due to
module references.

ASTERISK-27306

Change-Id: I63197ad33d1aebe60d12e0a6561718bdc54e4612
This commit is contained in:
Corey Farrell
2017-10-04 11:59:49 -04:00
parent 7d04544986
commit 65399a5eda
6 changed files with 48 additions and 40 deletions

View File

@@ -925,7 +925,9 @@ enum ast_sip_contact_filter {
* \retval 0 Success * \retval 0 Success
* \retval -1 Failure * \retval -1 Failure
*/ */
int ast_sip_register_service(pjsip_module *module); #define ast_sip_register_service(module) \
__ast_sip_register_service(module, __FILE__, __LINE__, __PRETTY_FUNCTION__)
int __ast_sip_register_service(pjsip_module *module, const char *file, int line, const char *func);
/*! /*!
* This is the opposite of ast_sip_register_service(). Unregistering a * This is the opposite of ast_sip_register_service(). Unregistering a
@@ -934,7 +936,9 @@ int ast_sip_register_service(pjsip_module *module);
* *
* \param module The PJSIP module to unregister * \param module The PJSIP module to unregister
*/ */
void ast_sip_unregister_service(pjsip_module *module); #define ast_sip_unregister_service(module) \
__ast_sip_unregister_service(module, __FILE__, __LINE__, __PRETTY_FUNCTION__)
void __ast_sip_unregister_service(pjsip_module *module, const char *file, int line, const char *func);
/*! /*!
* \brief Register a SIP authenticator * \brief Register a SIP authenticator
@@ -2615,14 +2619,20 @@ struct ast_sip_supplement {
* \retval 0 Success * \retval 0 Success
* \retval -1 Failure * \retval -1 Failure
*/ */
int ast_sip_register_supplement(struct ast_sip_supplement *supplement); #define ast_sip_register_supplement(supplement) \
__ast_sip_register_supplement(supplement, __FILE__, __LINE__, __PRETTY_FUNCTION__)
int __ast_sip_register_supplement(struct ast_sip_supplement *supplement,
const char *file, int line, const char *func);
/*! /*!
* \brief Unregister a an supplement to SIP out of dialog processing * \brief Unregister a an supplement to SIP out of dialog processing
* *
* \param supplement The supplement to unregister * \param supplement The supplement to unregister
*/ */
void ast_sip_unregister_supplement(struct ast_sip_supplement *supplement); #define ast_sip_unregister_supplement(supplement) \
__ast_sip_unregister_supplement(supplement, __FILE__, __LINE__, __PRETTY_FUNCTION__)
void __ast_sip_unregister_supplement(struct ast_sip_supplement *supplement,
const char *file, int line, const char *func);
/*! /*!
* \brief Retrieve the global MWI taskprocessor high water alert trigger level. * \brief Retrieve the global MWI taskprocessor high water alert trigger level.

View File

@@ -578,14 +578,20 @@ void ast_sip_session_unregister_sdp_handler(struct ast_sip_session_sdp_handler *
* \retval 0 Success * \retval 0 Success
* \retval -1 Failure * \retval -1 Failure
*/ */
int ast_sip_session_register_supplement(struct ast_sip_session_supplement *supplement); #define ast_sip_session_register_supplement(supplement) \
__ast_sip_session_register_supplement(supplement, __FILE__, __LINE__, __PRETTY_FUNCTION__)
int __ast_sip_session_register_supplement(struct ast_sip_session_supplement *supplement,
const char *file, int line, const char *func);
/*! /*!
* \brief Unregister a an supplement to SIP session processing * \brief Unregister a an supplement to SIP session processing
* *
* \param supplement The supplement to unregister * \param supplement The supplement to unregister
*/ */
void ast_sip_session_unregister_supplement(struct ast_sip_session_supplement *supplement); #define ast_sip_session_unregister_supplement(supplement) \
__ast_sip_session_unregister_supplement(supplement, __FILE__, __LINE__, __PRETTY_FUNCTION__)
void __ast_sip_session_unregister_supplement(struct ast_sip_session_supplement *supplement,
const char *file, int line, const char *func);
/*! /*!
* \brief Add supplements to a SIP session * \brief Add supplements to a SIP session

View File

@@ -2422,25 +2422,20 @@ static int register_service_noref(void *data)
return 0; return 0;
} }
static int register_service(void *data)
{
int res;
if (!(res = register_service_noref(data))) {
ast_module_ref(ast_module_info->self);
}
return res;
}
int internal_sip_register_service(pjsip_module *module) int internal_sip_register_service(pjsip_module *module)
{ {
return ast_sip_push_task_synchronous(NULL, register_service_noref, &module); return ast_sip_push_task_synchronous(NULL, register_service_noref, &module);
} }
int ast_sip_register_service(pjsip_module *module) int __ast_sip_register_service(pjsip_module *module, const char *file, int line, const char *func)
{ {
return ast_sip_push_task_synchronous(NULL, register_service, &module); int res;
if (!(res = ast_sip_push_task_synchronous(NULL, register_service_noref, &module))) {
__ast_module_ref(ast_module_info->self, file, line, func);
}
return res;
} }
static int unregister_service_noref(void *data) static int unregister_service_noref(void *data)
@@ -2454,25 +2449,16 @@ static int unregister_service_noref(void *data)
return 0; return 0;
} }
static int unregister_service(void *data)
{
int res;
if (!(res = unregister_service_noref(data))) {
ast_module_unref(ast_module_info->self);
}
return res;
}
int internal_sip_unregister_service(pjsip_module *module) int internal_sip_unregister_service(pjsip_module *module)
{ {
return ast_sip_push_task_synchronous(NULL, unregister_service_noref, &module); return ast_sip_push_task_synchronous(NULL, unregister_service_noref, &module);
} }
void ast_sip_unregister_service(pjsip_module *module) void __ast_sip_unregister_service(pjsip_module *module, const char *file, int line, const char *func)
{ {
ast_sip_push_task_synchronous(NULL, unregister_service, &module); if (!ast_sip_push_task_synchronous(NULL, unregister_service_noref, &module)) {
__ast_module_unref(ast_module_info->self, file, line, func);
}
} }
static struct ast_sip_authenticator *registered_authenticator; static struct ast_sip_authenticator *registered_authenticator;
@@ -3536,10 +3522,11 @@ void internal_sip_register_supplement(struct ast_sip_supplement *supplement)
} }
} }
int ast_sip_register_supplement(struct ast_sip_supplement *supplement) int __ast_sip_register_supplement(struct ast_sip_supplement *supplement,
const char *file, int line, const char *func)
{ {
internal_sip_register_supplement(supplement); internal_sip_register_supplement(supplement);
ast_module_ref(ast_module_info->self); __ast_module_ref(ast_module_info->self, file, line, func);
return 0; return 0;
} }
@@ -3562,10 +3549,11 @@ int internal_sip_unregister_supplement(struct ast_sip_supplement *supplement)
return res; return res;
} }
void ast_sip_unregister_supplement(struct ast_sip_supplement *supplement) void __ast_sip_unregister_supplement(struct ast_sip_supplement *supplement,
const char *file, int line, const char *func)
{ {
if (!internal_sip_unregister_supplement(supplement)) { if (!internal_sip_unregister_supplement(supplement)) {
ast_module_unref(ast_module_info->self); __ast_module_unref(ast_module_info->self, file, line, func);
} }
} }

View File

@@ -1,6 +1,7 @@
{ {
global: global:
LINKER_SYMBOL_PREFIXast_sip_*; LINKER_SYMBOL_PREFIXast_sip_*;
LINKER_SYMBOL_PREFIX__ast_sip_*;
LINKER_SYMBOL_PREFIXast_copy_pj_str; LINKER_SYMBOL_PREFIXast_copy_pj_str;
LINKER_SYMBOL_PREFIXast_copy_pj_str2; LINKER_SYMBOL_PREFIXast_copy_pj_str2;
LINKER_SYMBOL_PREFIXast_pjsip_rdata_get_endpoint; LINKER_SYMBOL_PREFIXast_pjsip_rdata_get_endpoint;

View File

@@ -56,10 +56,11 @@ void internal_sip_session_register_supplement(struct ast_sip_session_supplement
} }
} }
int ast_sip_session_register_supplement(struct ast_sip_session_supplement *supplement) int __ast_sip_session_register_supplement(struct ast_sip_session_supplement *supplement,
const char *file, int line, const char *func)
{ {
internal_sip_session_register_supplement(supplement); internal_sip_session_register_supplement(supplement);
ast_module_ref(AST_MODULE_SELF); __ast_module_ref(AST_MODULE_SELF, file, line, func);
return 0; return 0;
} }
@@ -82,10 +83,11 @@ int internal_sip_session_unregister_supplement(struct ast_sip_session_supplement
return res; return res;
} }
void ast_sip_session_unregister_supplement(struct ast_sip_session_supplement *supplement) void __ast_sip_session_unregister_supplement(struct ast_sip_session_supplement *supplement,
const char *file, int line, const char *func)
{ {
if (!internal_sip_session_unregister_supplement(supplement)) { if (!internal_sip_session_unregister_supplement(supplement)) {
ast_module_unref(AST_MODULE_SELF); __ast_module_unref(AST_MODULE_SELF, file, line, func);
} }
} }

View File

@@ -1,6 +1,7 @@
{ {
global: global:
LINKER_SYMBOL_PREFIXast_sip_session_*; LINKER_SYMBOL_PREFIXast_sip_session_*;
LINKER_SYMBOL_PREFIX__ast_sip_session_*;
LINKER_SYMBOL_PREFIXast_sip_dialog_get_session; LINKER_SYMBOL_PREFIXast_sip_dialog_get_session;
LINKER_SYMBOL_PREFIXast_sip_channel_pvt_alloc; LINKER_SYMBOL_PREFIXast_sip_channel_pvt_alloc;
local: local: