mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-03 11:25:35 +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:
@@ -4040,14 +4040,19 @@ static enum agi_result agi_handle_command(struct ast_channel *chan, AGI *agi, ch
|
||||
|
||||
parse_args(buf, &argc, argv);
|
||||
c = find_command(argv, 0);
|
||||
if (c && (!dead || (dead && c->dead))) {
|
||||
/* if this command wasn't registered by res_agi, be sure to usecount
|
||||
the module we are using */
|
||||
if (c->mod != ast_module_info->self)
|
||||
ast_module_ref(c->mod);
|
||||
if (!c || !ast_module_running_ref(c->mod)) {
|
||||
ami_res = "Invalid or unknown command";
|
||||
resultcode = 510;
|
||||
|
||||
ast_agi_send(agi->fd, chan, "%d %s\n", resultcode, ami_res);
|
||||
|
||||
publish_async_exec_end(chan, command_id, ami_cmd, resultcode, ami_res);
|
||||
|
||||
return AGI_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
if (!dead || (dead && c->dead)) {
|
||||
res = c->handler(chan, agi, argc, argv);
|
||||
if (c->mod != ast_module_info->self)
|
||||
ast_module_unref(c->mod);
|
||||
switch (res) {
|
||||
case RESULT_SHOWUSAGE:
|
||||
ami_res = "Usage";
|
||||
@@ -4094,21 +4099,15 @@ static enum agi_result agi_handle_command(struct ast_channel *chan, AGI *agi, ch
|
||||
|
||||
break;
|
||||
}
|
||||
} else if (c) {
|
||||
} else {
|
||||
ami_res = "Command Not Permitted on a dead channel or intercept routine";
|
||||
resultcode = 511;
|
||||
|
||||
ast_agi_send(agi->fd, chan, "%d %s\n", resultcode, ami_res);
|
||||
|
||||
publish_async_exec_end(chan, command_id, ami_cmd, resultcode, ami_res);
|
||||
} else {
|
||||
ami_res = "Invalid or unknown command";
|
||||
resultcode = 510;
|
||||
|
||||
ast_agi_send(agi->fd, chan, "%d %s\n", resultcode, ami_res);
|
||||
|
||||
publish_async_exec_end(chan, command_id, ami_cmd, resultcode, ami_res);
|
||||
}
|
||||
ast_module_unref(c->mod);
|
||||
|
||||
return AGI_RESULT_SUCCESS;
|
||||
}
|
||||
|
Reference in New Issue
Block a user