res_fax: Fix a tight race condition causing fax to crash in audio fallback
authorTorrey Searle <torrey@voxbone.com>
Thu, 29 Sep 2016 18:08:07 +0000 (20:08 +0200)
committerJoshua Colp <jcolp@digium.com>
Wed, 12 Oct 2016 11:54:13 +0000 (06:54 -0500)
When T.38 gets rejected and G711 failback occurs there is a period of
time where neither AST_FAX_TECH_T38 nor AST_FAX_TECH_AUDIO is set,
leading to a crash.

Change-Id: Icc3f457b2292d48a9d7843dac0028347420cc982

res/res_fax.c

index a2e1793..b97f3eb 100644 (file)
@@ -1600,6 +1600,13 @@ static int generic_fax_exec(struct ast_channel *chan, struct ast_fax_session_det
 
        chancount = 1;
 
+       /* Make sure one or the other is set to avoid race condition */
+       if (t38negotiated) {
+               details->caps |= AST_FAX_TECH_T38;
+       } else {
+               details->caps |= AST_FAX_TECH_AUDIO;
+       }
+
        /* create the FAX session */
        if (!(fax = fax_session_new(details, chan, reserved, token))) {
                ast_log(LOG_ERROR, "Can't create a FAX session, FAX attempt failed.\n");