From 20c3dba39e97a8b77e8957f01cb29ce023f7bd25 Mon Sep 17 00:00:00 2001
From: Torrey Searle <torrey@voxbone.com>
Date: Thu, 29 Sep 2016 20:08:07 +0200
Subject: [PATCH] res_fax: Fix a tight race condition causing fax to crash in
 audio fallback

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 | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/res/res_fax.c b/res/res_fax.c
index a2e1793239..b97f3eb290 100644
--- a/res/res_fax.c
+++ b/res/res_fax.c
@@ -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");
-- 
GitLab