From beb0d2e45020d7c32056208a28d2ccd020d7d28d Mon Sep 17 00:00:00 2001 From: Matthew Jordan <mjordan@digium.com> Date: Thu, 18 Sep 2014 17:13:36 +0000 Subject: [PATCH] res_fax_spandsp: Properly handle cleanup before starting FAXes. If faxing fails at a very early stage, then it is possible for us to pass a NULL t30 state pointer to spandsp, which spandsp is none too pleased with. This patch ensures that we pass the correct pointer to spandsp in the situation where we have not yet set our local t30 state pointer. ASTERISK-24301 #close Reported by Matt Jordan Patches: ASTERISK-24301-fax.diff Uploaded by Mark Michelson (License #5049) ........ Merged revisions 423360 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/11.6@423426 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- res/res_fax_spandsp.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/res/res_fax_spandsp.c b/res/res_fax_spandsp.c index fda29a1828..e68dbce7c9 100644 --- a/res/res_fax_spandsp.c +++ b/res/res_fax_spandsp.c @@ -177,8 +177,25 @@ static void set_ecm(t30_state_t *t30_state, struct ast_fax_session_details *deta static void session_destroy(struct spandsp_pvt *p) { struct ast_frame *f; + t30_state_t *t30_to_terminate; - t30_terminate(p->t30_state); + if (p->t30_state) { + t30_to_terminate = p->t30_state; + } else if (p->ist38) { +#if SPANDSP_RELEASE_DATE >= 20080725 + t30_to_terminate = &p->t38_state.t30; +#else + t30_to_terminate = &p->t38_state.t30_state; +#endif + } else { +#if SPANDSP_RELEASE_DATE >= 20080725 + t30_to_terminate = &p->fax_state.t30; +#else + t30_to_terminate = &p->fax_state.t30_state; +#endif + } + + t30_terminate(t30_to_terminate); p->isdone = 1; ast_timer_close(p->timer); -- GitLab