Enable REF_DEBUG for ast_module_ref / ast_module_unref.

Add ast_module_shutdown_ref for use by modules that can
only be unloaded during graceful shutdown.

When REF_DEBUG is enabled:
* Add an empty ao2 object to struct ast_module.
* Allocate ao2 object when the module is loaded.
* Perform an ao2_ref in each place where mod->usecount is manipulated.
* ao2_cleanup on module unload.

ASTERISK-24479 #close
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/4141/
........

Merged revisions 431662 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 431663 from http://svn.asterisk.org/svn/asterisk/branches/13


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431672 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Corey Farrell
2015-02-11 17:03:04 +00:00
parent 137c4b0778
commit 8cc50b1ebc
3 changed files with 85 additions and 6 deletions

View File

@@ -499,6 +499,10 @@ static int feature_hangup(struct ast_bridge_channel *bridge_channel, void *hook_
static int unload_module(void)
{
ast_bridge_features_unregister(AST_BRIDGE_BUILTIN_HANGUP);
ast_bridge_features_unregister(AST_BRIDGE_BUILTIN_AUTOMON);
ast_bridge_features_unregister(AST_BRIDGE_BUILTIN_AUTOMIXMON);
return 0;
}
@@ -508,8 +512,8 @@ static int load_module(void)
ast_bridge_features_register(AST_BRIDGE_BUILTIN_AUTOMON, feature_automonitor, NULL);
ast_bridge_features_register(AST_BRIDGE_BUILTIN_AUTOMIXMON, feature_automixmonitor, NULL);
/* Bump up our reference count so we can't be unloaded */
ast_module_ref(ast_module_info->self);
/* This module cannot be unloaded until shutdown */
ast_module_shutdown_ref(ast_module_info->self);
return AST_MODULE_LOAD_SUCCESS;
}