From: Michael Jerris Date: Mon, 5 May 2014 23:18:58 +0000 (-0400) Subject: FS-6484: guess at fixing seg from mod_managed, this function should never be called... X-Git-Tag: v1.5.12~38^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3ff3f327eef8ef184c4f500709c64665acd44545;p=thirdparty%2Ffreeswitch.git FS-6484: guess at fixing seg from mod_managed, this function should never be called without a channel, but if it does, throw an error instead --- diff --git a/src/switch_cpp.cpp b/src/switch_cpp.cpp index 7e78f73804..f0bb64f53b 100644 --- a/src/switch_cpp.cpp +++ b/src/switch_cpp.cpp @@ -1348,19 +1348,24 @@ SWITCH_DECLARE(void) bridge(CoreSession &session_a, CoreSession &session_b) SWITCH_DECLARE_NONSTD(switch_status_t) hanguphook(switch_core_session_t *session_hungup) { - switch_channel_t *channel = switch_core_session_get_channel(session_hungup); - CoreSession *coresession = NULL; - switch_channel_state_t state = switch_channel_get_state(channel); - - if ((coresession = (CoreSession *) switch_channel_get_private(channel, "CoreSession"))) { - if (coresession->hook_state != state) { - coresession->cause = switch_channel_get_cause(channel); - coresession->hook_state = state; - coresession->check_hangup_hook(); + if (session_hungup) { + switch_channel_t *channel = switch_core_session_get_channel(session_hungup); + CoreSession *coresession = NULL; + switch_channel_state_t state = switch_channel_get_state(channel); + + if ((coresession = (CoreSession *) switch_channel_get_private(channel, "CoreSession"))) { + if (coresession->hook_state != state) { + coresession->cause = switch_channel_get_cause(channel); + coresession->hook_state = state; + coresession->check_hangup_hook(); + } } - } - return SWITCH_STATUS_SUCCESS; + return SWITCH_STATUS_SUCCESS; + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "hangup hook called with null session, something is horribly wrong\n"); + return SWITCH_STATUS_FALSE; + } }