From: Gregory Nietsky Date: Mon, 3 Oct 2011 09:37:59 +0000 (+0000) Subject: Fixup a race condition in res_fax.c where FAXOPT(gateway)=no will X-Git-Tag: 10.0.0-rc1~124 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=16cf441dcc968c88cdb752fcaaaa4126092db56e;p=thirdparty%2Fasterisk.git Fixup a race condition in res_fax.c where FAXOPT(gateway)=no will turn off the gateway but the framehook is not destroyed. this problem happens when a gateway is attempted in the dialplan and the device is not available i may want to do fax to mail in the server it will not be allowed. instead of checking only AST_FAX_TECH_GATEWAY also check gateway_id Reverts 338904 Fix some white space. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/10@338950 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/res/res_fax.c b/res/res_fax.c index 49812167c9..5f2b693f53 100644 --- a/res/res_fax.c +++ b/res/res_fax.c @@ -1650,7 +1650,7 @@ static int receivefax_exec(struct ast_channel *chan, const char *data) ast_string_field_set(details, error, "INIT_ERROR"); set_channel_variables(chan, details); - if (details->caps & AST_FAX_TECH_GATEWAY) { + if ((details->caps & AST_FAX_TECH_GATEWAY) && (details->gateway_id > 0)) { ast_string_field_set(details, resultstr, "can't receive a fax on a channel with a T.38 gateway"); set_channel_variables(chan, details); ast_log(LOG_ERROR, "executing ReceiveFAX on a channel with a T.38 Gateway is not supported\n"); @@ -2120,7 +2120,7 @@ static int sendfax_exec(struct ast_channel *chan, const char *data) ast_string_field_set(details, error, "INIT_ERROR"); set_channel_variables(chan, details); - if (details->caps & AST_FAX_TECH_GATEWAY) { + if ((details->caps & AST_FAX_TECH_GATEWAY) && (details->gateway_id > 0)) { ast_string_field_set(details, resultstr, "can't send a fax on a channel with a T.38 gateway"); set_channel_variables(chan, details); ast_log(LOG_ERROR, "executing SendFAX on a channel with a T.38 Gateway is not supported\n"); @@ -2843,8 +2843,6 @@ static struct ast_frame *fax_gateway_framehook(struct ast_channel *chan, struct } } - details->caps &= ~AST_FAX_TECH_GATEWAY; - ao2_ref(details, -1); return NULL; } @@ -3673,7 +3671,7 @@ static int load_module(void) } ast_cli_register_multiple(fax_cli, ARRAY_LEN(fax_cli)); - res = ast_custom_function_register(&acf_faxopt); + res = ast_custom_function_register(&acf_faxopt); fax_logger_level = ast_logger_register_level("FAX"); return res;