]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Fixup a race condition in res_fax.c where FAXOPT(gateway)=no will
authorGregory Nietsky <gregory@distrotech.co.za>
Mon, 3 Oct 2011 09:37:59 +0000 (09:37 +0000)
committerGregory Nietsky <gregory@distrotech.co.za>
Mon, 3 Oct 2011 09:37:59 +0000 (09:37 +0000)
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

res/res_fax.c

index 49812167c9a96ff2640dcbe125e7c02d9098251a..5f2b693f53df1dac74f8fd1b1ff99581c512e347 100644 (file)
@@ -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;