[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