diff --git a/channel.c b/channel.c
index 00c863b75a78c3d9633aae1fdf7e3fc9a82d41cd..6a4a177dec4e9d2ae1f04c67a59c5d9ed137ad1a 100755
--- a/channel.c
+++ b/channel.c
@@ -1363,7 +1363,11 @@ int ast_write(struct ast_channel *chan, struct ast_frame *fr)
 		ast_log(LOG_WARNING, "Don't know how to handle control frames yet\n");
 		break;
 	case AST_FRAME_DTMF:
+		chan->blocking = 0;
+		ast_mutex_unlock(&chan->lock);
 		res = do_senddigit(chan,fr->subclass);
+		ast_mutex_lock(&chan->lock);
+		CHECK_BLOCKING(chan);
 		break;
 	case AST_FRAME_TEXT:
 		if (chan->pvt->send_text)