summaryrefslogtreecommitdiff
path: root/res/res_fax.c
diff options
context:
space:
mode:
authorTorrey Searle <torrey@voxbone.com>2016-09-29 20:08:07 +0200
committerJoshua Colp <jcolp@digium.com>2016-10-12 06:54:13 -0500
commit20c3dba39e97a8b77e8957f01cb29ce023f7bd25 (patch)
treebb8b4246c4aa54f19e689ee3a1a69f90088f0073 /res/res_fax.c
parent1ca148cae8d22ff9a54383c0bd0a3f3bb91ff304 (diff)
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
Diffstat (limited to 'res/res_fax.c')
-rw-r--r--res/res_fax.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/res/res_fax.c b/res/res_fax.c
index a2e179323..b97f3eb29 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");