From 360ed43a04f2ee7603d65c297ba658815610b425 Mon Sep 17 00:00:00 2001 From: Stefan Knoblich Date: Fri, 29 Apr 2011 01:58:42 +0200 Subject: [PATCH] ftmod_libpri: ignore missing call_data in on_hangup() and use the call handle passed in the pevent structure (still needs more love...) Signed-off-by: Stefan Knoblich --- libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c b/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c index 6653a923aa..0f45128ac9 100644 --- a/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c +++ b/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c @@ -854,7 +854,7 @@ static int on_hangup(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_even { ftdm_span_t *span = spri->span; ftdm_channel_t *chan = ftdm_span_get_channel(span, pevent->hangup.channel); - q931_call *call = NULL; +/* q931_call *call = NULL; */ if (!chan) { ftdm_log(FTDM_LOG_CRIT, "-- Hangup on channel %d:%d %s but it's not in use?\n", ftdm_span_get_id(spri->span), pevent->hangup.channel); @@ -868,22 +868,25 @@ static int on_hangup(lpwrap_pri_t *spri, lpwrap_pri_event_t event_type, pri_even goto done; } +/* + * Make sure we can really tear-down a call, simply ignore the missing call_data and + * use the call handle from the event + * if (!chan->call_data) { ftdm_log_chan(chan, FTDM_LOG_DEBUG, "Ignoring remote hangup in state %s with no call data\n", ftdm_channel_get_state_str(chan)); goto done; } call = (q931_call *)chan->call_data; - +*/ ftdm_log(FTDM_LOG_DEBUG, "-- Hangup on channel %d:%d\n", ftdm_span_get_id(spri->span), pevent->hangup.channel); - pri_release(spri->pri, call, 0); - pri_destroycall(spri->pri, call); + pri_release(spri->pri, pevent->hangup.call, 0); + pri_destroycall(spri->pri, pevent->hangup.call); chan->caller_data.hangup_cause = pevent->hangup.cause; chan->call_data = NULL; ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_TERMINATING); - done: ftdm_channel_unlock(chan); return 0;