[LAD] Test app for LADSPA plugins

Damon Chaplin damon at karuna.eclipse.co.uk
Tue Jul 28 13:02:26 UTC 2009


On Tue, 2009-07-28 at 14:44 +0200, Tim Goetze wrote:
> [Damon Chaplin]
> >caps	memory errors in 3 plugins
> 
> Thanks for pointing out the make invocation.  I haven't used valgrind 
> before so my cluelessness may show again in what follows.
> 
> Anyway, when running this:
> 
> $ valgrind --tool=memcheck --leak-check=full --show-reachable=yes
>   ./test-ladspa -p caps
> 
> I see this in the final summary:
> 
> ==12021== ERROR SUMMARY: 7 errors from 7 contexts (suppressed: 33 from 
> 2)
> 
> followed by a lot of what I suppose are call traces - are they?
> 
> If they are, they all involving the g_malloc interface.  However, this 
> interface isn't used by caps at all.
> 
> I do see valgrind complaining about the use of an unitialised variable 
> in some of the plugins (not entirely impossible), but given the memory 
> leak summary I fail to see which plugins if any are affected.

Yes, using uninitialized values is the only problem in CAPS. Not as bad
as invalid writes or reads, but often still a bug:


Testing  2589: C* ToneStack - Tone stack emulation (caps.so)
==9992== Conditional jump or move depends on uninitialised value(s)
==9992==    at 0x4129F9F: DSP::ToneStack::start_cycle(float**, int)
(ToneStack.h:103)
==9992==    by 0x414432D: void ToneStack::one_cycle<&(store_func(float*,
int, float, float))>(int) (ToneStack.cc:80)
==9992==    by 0x41443BF: ToneStack::run(int) (ToneStack.h:56)

>From looking at the source I'd guess that the "model" variable hasn't
been initialised (in dsp/ToneStack.h:103). That may or not matter.
Though it's best to initialise it just to avoid the warnings.


Testing  2587: C* AmpV - Tube amp (caps.so)
==9992== 
==9992== Conditional jump or move depends on uninitialised value(s)
==9992==    at 0x412BA10: void AmpV::one_cycle<&(store_func(float*, int,
float, float)), 8>(int) (Amp.cc:349)
==9992==    by 0x412BF13: AmpV::run(int) (Amp.h:317)

Maybe "tone" hasn't been initialised here (Amp.cc:349). Again that might
or might not matter.


Testing  2592: C* AmpVTS - Tube amp + Tone stack (caps.so)
==9992== 
==9992== Conditional jump or move depends on uninitialised value(s)
==9992==    at 0x4129F9F: DSP::ToneStack::start_cycle(float**, int)
(ToneStack.h:103)
==9992==    by 0x412A622: void AmpVTS::one_cycle<&(store_func(float*,
int, float, float)), 8>(int) (Amp.cc:508)
==9992==    by 0x412AA0F: AmpVTS::run(int) (Amp.h:366)

This seems to be the same as the first one.

Damon





More information about the Linux-audio-dev mailing list