mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-02 19:16:15 +00:00
loader: Create ast_module_running_ref.
This function returns NULL if the module in question is not running. I did not change ast_module_ref as most callers do not check the result and they always call ast_module_unref. Make use of this function when running registered items from: * app_stack API's * bridge technologies * CLI commands * File formats * Manager Actions * RTP engines * Sorcery Wizards * Timing Interfaces * Translators * AGI Commands * Fax Technologies ASTERISK-20346 #close Change-Id: Ia16fd28e188b2fc0b9d18b8a5d9cacc31df73fcc
This commit is contained in:
@@ -428,6 +428,7 @@ struct ast_rtp_instance *ast_rtp_instance_new(const char *engine_name,
|
||||
struct ast_sockaddr address = {{0,}};
|
||||
struct ast_rtp_instance *instance = NULL;
|
||||
struct ast_rtp_engine *engine = NULL;
|
||||
struct ast_module *mod_ref;
|
||||
|
||||
AST_RWLIST_RDLOCK(&engines);
|
||||
|
||||
@@ -450,10 +451,15 @@ struct ast_rtp_instance *ast_rtp_instance_new(const char *engine_name,
|
||||
}
|
||||
|
||||
/* Bump up the reference count before we return so the module can not be unloaded */
|
||||
ast_module_ref(engine->mod);
|
||||
mod_ref = ast_module_running_ref(engine->mod);
|
||||
|
||||
AST_RWLIST_UNLOCK(&engines);
|
||||
|
||||
if (!mod_ref) {
|
||||
/* BUGBUG: improve handling of this situation. */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Allocate a new RTP instance */
|
||||
if (!(instance = ao2_alloc(sizeof(*instance), instance_destructor))) {
|
||||
ast_module_unref(engine->mod);
|
||||
|
Reference in New Issue
Block a user