Index: asterisk-1.6.2.18/main/channel.c =================================================================== --- asterisk-1.6.2.18.orig/main/channel.c 2011-06-03 14:35:25.000000000 +0100 +++ asterisk-1.6.2.18/main/channel.c 2011-06-03 15:21:42.000000000 +0100 @@ -5042,7 +5042,13 @@ clonechan->hangupcause, ast_cause2str(clonechan->hangupcause) ); + /* + * Cannot hold a channel lock already when calling ast_channel_free() as it walks the + * channel list and needs the &channels lock. Unlock and re-lock to avoid deadlock + */ + ast_channel_unlock(original); ast_channel_free(clonechan); + ast_channel_lock(original); } else { ast_debug(1, "Released clone lock on '%s'\n", clonechan->name); ast_set_flag(clonechan, AST_FLAG_ZOMBIE);