Index: cdr/cdr_pgsql.c =================================================================== --- cdr/cdr_pgsql.c (revision 298335) +++ cdr/cdr_pgsql.c (working copy) @@ -216,12 +216,12 @@ LENGTHEN_BUF2(13); ast_str_append(&sql2, 0, "%s%s", first ? "" : ",", value); } else if (strncmp(cur->type, "float", 5) == 0) { - struct timeval *when = cur->name[0] == 'd' ? &cdr->start : &cdr->answer; + struct timeval *when = cur->name[0] == 'd' ? &cdr->start : ast_tvzero(cdr->answer) ? &cdr->end : &cdr->answer; LENGTHEN_BUF2(31); ast_str_append(&sql2, 0, "%s%f", first ? "" : ",", (double) (ast_tvdiff_us(cdr->end, *when) / 1000000.0)); } else { /* Char field, probably */ - struct timeval *when = cur->name[0] == 'd' ? &cdr->start : &cdr->answer; + struct timeval *when = cur->name[0] == 'd' ? &cdr->start : ast_tvzero(cdr->answer) ? &cdr->end : &cdr->answer; LENGTHEN_BUF2(31); ast_str_append(&sql2, 0, "%s'%f'", first ? "" : ",", (double) (ast_tvdiff_us(cdr->end, *when) / 1000000.0)); }