[Asterisk-Users] 1.2.9.1 crashed today
BJ Weschke
bweschke at gmail.com
Wed Jun 21 04:57:56 MST 2006
On 6/21/06, Matt <mhoppes at gmail.com> wrote:
> Ok,
> So here's some information I've, to this point, left out. I applied
> the patch to allow * to be pressed in queues to park a call (*270).
> After reverting the patch the system seems stable. So, it almost
> seems like the crash is directly related to the number of times
> someone parks a call that came in a queue.
>
> I don't understand, though....
>
> /* terminates call */
> ast_frfree(f);
> f = NULL;
>
> How does removing those 2 lines cause asterisk to crash? Basically
> the code looks for a *, if it sees it it runs that... so the patch
> removes those lines.. so when asterisk sees a * it doesn't do
> anything. The variables are so cryptic I can't exactly figure out
> what its doing.. is ast_frfree(f) suppose to 'free' something, perhaps
> that is not getting freed? But then what is f = NULL. Yikes, who
> comes up with these variable names?
>
Yes, ast_frfree(..) is supposed to free any allocated memory
associated with the pointer to the Asterisk frame structure given to
it. If the structure has already been freed somewhere else in the code
and you try to call this again, you will segfault Asterisk. If you
don't call it at all, you will leak memory associated with the
structure. The pointer is being set to NULL after the call so that
further checks of the pointer itself will be able to determine that
the structure has been free'd already and doesn't need to be done
again (preventing a segfault from calling it twice).
--
Bird's The Word Technologies, Inc.
http://www.btwtech.com/
More information about the asterisk-users
mailing list