diff --git a/main/channel.c b/main/channel.c
index 95639ebde3028520519ce886c225bdc27a1d9c91..ed32cdc47a217074c10d5a0c458e4fe3de3fb66a 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -1637,8 +1637,10 @@ int __ast_answer(struct ast_channel *chan, unsigned int delay)
 			res = chan->tech->answer(chan);
 		ast_setstate(chan, AST_STATE_UP);
 		ast_cdr_answer(chan->cdr);
+		ast_channel_unlock(chan);
 		if (delay)
 			ast_safe_sleep(chan, delay);
+		return res;
 		break;
 	case AST_STATE_UP:
 		ast_cdr_answer(chan->cdr);