Index: cdr.c =================================================================== --- cdr.c (revision 8511) +++ cdr.c (working copy) @@ -520,8 +520,10 @@ chan = !ast_strlen_zero(cdr->channel) ? cdr->channel : ""; if (ast_test_flag(cdr, AST_CDR_FLAG_POSTED)) ast_log(LOG_WARNING, "CDR on channel '%s' already posted\n", chan); - if (!ast_test_flag(cdr, AST_CDR_FLAG_LOCKED)) - cdr->disposition = AST_CDR_FAILED; + if (!ast_test_flag(cdr, AST_CDR_FLAG_LOCKED)) { + if (cdr->disposition < AST_CDR_FAILED) + cdr->disposition = AST_CDR_FAILED; + } cdr = cdr->next; } } Index: include/asterisk/cdr.h =================================================================== --- include/asterisk/cdr.h (revision 8511) +++ include/asterisk/cdr.h (working copy) @@ -32,8 +32,8 @@ #define AST_CDR_NOANSWER (1 << 0) #define AST_CDR_BUSY (1 << 1) -#define AST_CDR_ANSWERED (1 << 2) -#define AST_CDR_FAILED (1 << 3) +#define AST_CDR_FAILED (1 << 2) +#define AST_CDR_ANSWERED (1 << 3) /*! AMA Flags */ #define AST_CDR_OMIT (1)