[asterisk-dev] [Code Review] Asterisk crashes when hanging up a 3-way call.
Mark Michelson
mmichelson at digium.com
Wed Nov 12 11:34:10 CST 2008
Joel Jn-Francois wrote:
> Hi
>
> I am using this code below to calculate the duration and billsec of a
> call in asterisk. It works fine when I test it with one call, however
> if I make a 3-way call, when I hangup it crashes asterisks. When I check
> the log I get this debug error right before it crashes:DEBUG[23679]
> rtp.c: Oooh, something is weird, backing out.
>
> Can anyone give me some insight as to what I am doing wrong.
>
> struct tm tm;
> timestr[128];
> time_t t;
>
> {
> time(&t);
> ast_localtime(&t, &tm, NULL);
> strftime(timestr,128,DATE_FORMAT,&tm);
>
> ast_cdr_end(cdr);
>
> if (!cdr->end.tv_sec && !cdr->end.tv_usec)
> ast_log(LOG_WARNING, "CDR on channel '%s' lacks end\n",
> cdr->channel);
>
> if (!cdr->start.tv_sec && !cdr->start.tv_usec)
> ast_log(LOG_WARNING, "CDR on channel '%s' lacks start\n",
> cdr->channel);
>
> if (cdr->answer.tv_sec || cdr->answer.tv_usec) {
> cdr->billsec = cdr->end.tv_sec - cdr->answer.tv_sec +
> (cdr->end.tv_usec - cdr->answer.tv_usec) / 1000000;
> } else { cdr->billsec = 0;}
>
> }
>
You may want to double check that cdr is non-NULL before proceeding in your code.
When debugging crashes, the best place to start is by looking at a backtrace.
There are instructions for how to obtain a backtrace using gdb in
doc/backtrace.txt in the Asterisk source.
Mark Michelson
More information about the asterisk-dev
mailing list