[asterisk-dev] 1.6.1.10-rc1 crash on a VOLUME() func

Pavel Troller patrol at sinus.cz
Sun Nov 8 07:50:29 CST 2009


Hi!

> On Sun, 8 Nov 2009 14:33:06 +0200, Kaloyan Kovachev wrote
> > On Sat, 7 Nov 2009 10:40:13 +0100, Pavel Troller wrote
> > > Hi!
> > >   I just upgraded to 1.6.1.10-rc1 and it started to crash occasionally. By
> > > test-calling, I found that just one dialplan extension is causing the crash,
> > > which contained a Set(VOLUME(TX)=2) command.
> > >   The crash is detected as:
> > > *** glibc detected *** /opt/asterisk/sbin/asterisk: double free or
> > corruption (!prev): 0x092e7bc0 ***
> > >   but it seems that it doesn't appear directly in the code of the function
> > > mentioned; it looks that it just corrupts (or frees) some structure in memory,
> > > which then causes a subsequent crash at another place. Because func_volume.c
> > > code didn't change since I'm tracking the sources (from 1.6.1.0), it looks
> that
> > > some other change made the VOLUME() function incompatible with the current
> > > code, or some hidden bug present in the code for a longer time has been
> > > activated. I was trying to find a cause in the patch text, but I failed.
> > >   I just know, that
> > >   1) In 1.6.1.7-rc2 it was working perfectly
> > >   2) In 1.6.10.1-rc1, removing the above command prevents the crashes.
> > > 
> > >   Any help would be appreciated; I'm ready to experiment with possible
> patches.
> > >
> > 
> > It is probably not the patch you are loking for, but there is one 'ready for
> > review' at https://issues.asterisk.org/view.php?id=14621 which is a rewrite of
> > function volume ... it may or may not fix your crash ... in case there are
> > some changes in the audiohooks code - the crash might be because they were not
> > made to the function's own audiohook implementation
> > 

I've imported the patch onto my sources, recompiled, but the crash is still
there.

> 
> the audiohooks code was changed in
> http://svnview.digium.com/svn/asterisk?view=revision&revision=224858 
> I guess at line 648:
>  if (audiohook->manipulate_callback(audiohook, chan, middle_frame, direction)) {
> 
> should be:
> if (audiohook->manipulate_callback(audiohook, chan, middle_frame, direction)
> && middle_frame) {

Also entered this change, and, as in the previous case, the crash is still there.
I will debug the problem more, but I need to clarify something regarding Asterisk
build system. It's for a separate mail, I'm going to write it just now :-).

With regards, Pavel



More information about the asterisk-dev mailing list