discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Discuss-gnuradio] Valgrind & gr_fir_fff_simd::set_taps - memory lea


From: Philip Balister
Subject: Re: [Discuss-gnuradio] Valgrind & gr_fir_fff_simd::set_taps - memory leak
Date: Mon, 21 Oct 2013 13:51:12 -0400
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130625 Thunderbird/17.0.7

On 10/21/2013 01:43 PM, Luke Berndt wrote:
> I am trying to track down an insidious little memory leak in a Block that
> wraps the DSD vocoder. I have run Valgrind against it and didn't find
> anything obvious. Valgrind didn't like the way memory was being assigned by
> set_taps and it seems like this came up in a previous thread too:
> http://lists.gnu.org/archive/html/discuss-gnuradio/2012-06/msg00015.html

Look at https://scan.coverity.com/ . You'll need to make an account and
we'll need to grant you access. It is scanning the 3.7 code, but you
might be able to gain some insight by looking at the static analysis.

Philip


> 
> It doesn't look like there was a definitive answer if this was a real
> problem or just Valgrind getting confused.
> 
> For Background:
> I am running GNURadio 3.6.5.1 and my program is all in C++ without any
> python. The DSD Vocoder block run the DSD program (which is a C program) in
> a pthread and passes it samples using a shared array and some mutex. For
> each separate talkgroup conversation on a trunking radio system, the
> TopBlock gets locked, a new logging flow with the DSD block in it gets
> created and then connected. When the conversation is over the tb get
> locked/unlocked and the flows is destroyed. Are there any obvious gotchas
> that might leak with this approach? I am using detached threads to run
> DSDand deleting all of the
> mutex/cond I init.
> 
> Here is the Valgrind output concerning the set_taps:
> 
> Decoding only P25 Phase 1 frames.
> Enabling only C4FM modulation optimizations.
>  Recv [ 0 ]   Tg: 1616  Freq: 856.6
> ==5138== Thread 9:
> ==5138== Invalid read of size 8
> ==5138==    at 0x4F3F48C: float_dotprod_sse (in /usr/local/lib/libgnuradio
> -core-3.6.5.1.so.0.0.0)
> ==5138==    by 0x4F40770: gr_fir_fff_generic::filterN(float*, float const*,
> unsigned long) (in /usr/local/lib/libgnuradio-core-3.6.5.1.so.0.0.0)
> ==5138==    by 0x4F41D02: gr_fir_filter_fff::work(int, std::vector<void
> const*, std::allocator<void const*> >&, std::vector<void*,
> std::allocator<void*> >&) (in /usr/local/lib/libgnuradio
> -core-3.6.5.1.so.0.0.0)
> ==5138==    by 0x4F29EF3: gr_sync_decimator::general_work(int,
> std::vector<int, std::allocator<int> >&, std::vector<void const*,
> std::allocator<void const*> >&, std::vector<void*, std::allocator<void*>
>> &) (in /usr/local/lib/libgnuradio-core-3.6.5.1.so.0.0.0)
> ==5138==    by 0x4F099D5: gr_block_executor::run_one_iteration() (in /usr
> /local/lib/libgnuradio-core-3.6.5.1.so.0.0.0)
> ==5138==    by 0x4F33B32: gr_tpb_thread_body::gr_tpb
> _thread_body(boost::shared_ptr<gr_block>, int) (in /usr/local/lib/
> libgnuradio-core-3.6.5.1.so.0.0.0)
> ==5138==    by 0x4F27077:
> boost::detail::function::void_function_obj_invoker0<gruel::thread_body_wrapper<
> tpb_container>, void>::invoke(boost::detail::function::function_buffer&)
> (in /usr/local/lib/libgnuradio-core-3.6.5.1.so.0.0.0)
> ==5138==    by 0x581F14E: boost::detail::thread_data<boost::function0<void>
>> ::run() (in /usr/local/lib/libgruel-3.6.5.1.so.0.0.0)
> ==5138==    by 0x76716E8: ??? (in /usr/lib/libboost_thread.so.1.49.0)
> ==5138==    by 0x5A39F8D: start_thread (pthread_create.c:311)
> ==5138==    by 0x7394E1C: clone (clone.S:113)
> ==5138==  Address 0xfc63288 is 88 bytes inside a block of size 95 alloc'd
> ==5138==    at 0x4C2CD7B: malloc (in /usr/lib/valgrind/vgpreload_memcheck
> -amd64-linux.so)
> ==5138==    by 0x4F79FBE: malloc16Align (in /usr/local/lib/libgnuradio
> -core-3.6.5.1.so.0.0.0)
> ==5138==    by 0x4F7A009: calloc16Align (in /usr/local/lib/libgnuradio
> -core-3.6.5.1.so.0.0.0)
> ==5138==    by 0x4F3D435: gr_fir_fff_simd::set_taps(std::vector<float,
> std::allocator<float> > const&) (in /usr/local/lib/libgnuradio
> -core-3.6.5.1.so.0.0.0)
> ==5138==    by 0x4F3D553: gr_fir_fff_simd::gr_fir_fff_simd(std::vector<float,
> std::allocator<float> > const&) (in /usr/local/lib/libgnuradio
> -core-3.6.5.1.so.0.0.0)
> ==5138==    by 0x4F3D7F8: gr_fir_fff_sse::gr_fir_fff_sse(std::vector<float,
> std::allocator<float> > const&) (in /usr/local/lib/libgnuradio
> -core-3.6.5.1.so.0.0.0)
> ==5138==    by 0x4F3BAE0:
> gr_fir_sysconfig_x86::create_gr_fir_fff(std::vector<float,
> std::allocator<float> > const&) (in /usr/local/lib/libgnuradio
> -core-3.6.5.1.so.0.0.0)
> ==5138==    by 0x4F41FF5: gr_fir_filter_fff::gr_fir_filter_fff(int,
> std::vector<float, std::allocator<float> > const&) (in /usr/local/lib/
> libgnuradio-core-3.6.5.1.so.0.0.0)
> ==5138==    by 0x4F4217B: gr_make_fir_filter_fff(int, std::vector<float,
> std::allocator<float> > const&) (in /usr/local/lib/libgnuradio
> -core-3.6.5.1.so.0.0.0)
> ==5138==    by 0x482D55: log_dsd::log_dsd(float, float, long, int)
> (logging_receiver_dsd.cc:76)
> ==5138==    by 0x482531: make_log_dsd(float, float, long, int)
> (logging_receiver_dsd.cc:8)
> ==5138==    by 0x46116F: main (smartnet.cc:394)
> 
> 
> And here is the code that creates the fir_filter_fff (in the
> constructorfor the logger):
> 
> const float a[] = { 0.1, 0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1};
> std::vector<float> data( a,a + sizeof( a ) / sizeof( a[0] ) );
> sym_filter = gr_make_fir_filter_fff(1, data);
> 
> 
> 
> _______________________________________________
> Discuss-gnuradio mailing list
> address@hidden
> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]