diff -urN asterisk-11.2.1.orig/channels/chan_sip.c asterisk-11.2.1/channels/chan_sip.c --- asterisk-11.2.1.orig/channels/chan_sip.c 2013-01-09 12:43:00.000000000 -0800 +++ asterisk-11.2.1/channels/chan_sip.c 2013-03-25 12:47:33.491194437 -0700 @@ -7417,6 +7417,10 @@ struct sip_pvt *p = ast_channel_tech_pvt(ast); int res = 0; + if (!p) { + return -1; + } + sip_pvt_lock(p); switch (ast_test_flag(&p->flags[0], SIP_DTMF)) { case SIP_DTMF_INBAND: @@ -7441,6 +7445,10 @@ struct sip_pvt *p = ast_channel_tech_pvt(ast); int res = 0; + if (!p) { + return -1; + } + sip_pvt_lock(p); switch (ast_test_flag(&p->flags[0], SIP_DTMF)) { case SIP_DTMF_INFO: diff -urN asterisk-11.2.1.orig/main/channel.c asterisk-11.2.1/main/channel.c --- asterisk-11.2.1.orig/main/channel.c 2013-01-09 12:43:00.000000000 -0800 +++ asterisk-11.2.1/main/channel.c 2013-03-25 13:02:38.522195090 -0700 @@ -4738,8 +4738,9 @@ "941+1209", /* * */ "941+1477" /* # */ }; + struct ast_channel_tech *tech = ast_channel_tech(chan); - if (!ast_channel_tech(chan)->send_digit_begin) + if (!tech->send_digit_begin) return 0; ast_channel_lock(chan); @@ -4747,7 +4748,7 @@ ast_channel_sending_dtmf_tv_set(chan, ast_tvnow()); ast_channel_unlock(chan); - if (!ast_channel_tech(chan)->send_digit_begin(chan, digit)) + if (!tech->send_digit_begin(chan, digit)) return 0; if (digit >= '0' && digit <='9') @@ -4769,9 +4770,10 @@ int ast_senddigit_end(struct ast_channel *chan, char digit, unsigned int duration) { int res = -1; + struct ast_channel_tech *tech = ast_channel_tech(chan); - if (ast_channel_tech(chan)->send_digit_end) - res = ast_channel_tech(chan)->send_digit_end(chan, digit, duration); + if (tech->send_digit_end) + res = tech->send_digit_end(chan, digit, duration); ast_channel_lock(chan); if (ast_channel_sending_dtmf_digit(chan) == digit) {