diff options
Diffstat (limited to 'main/rtp_engine.c')
-rw-r--r-- | main/rtp_engine.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/main/rtp_engine.c b/main/rtp_engine.c index 76bdf87b0..1c734778f 100644 --- a/main/rtp_engine.c +++ b/main/rtp_engine.c @@ -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); |