I have a rather complex flowgraph that used to work well with GNU Radio 3.7.
I upgraded to 3.8.1, and now it crashes (for some input, but even when I
use /dev/zero as file source) with something that looks like in the core of
GNU Radio (not directly in the block).

Environment:
GNU Radio 3.8.1
Python 3.8.2
Ubuntu 16.04.6

There are many blocks, but let's focus on the last ones.
I have a float-to-int block (the standard one) which feeds data into a sink
block that is written in Python. In case it is relevant, this is the block
that feeds the sink:         *float_to_int =
blocks.float_to_int(); self.connect(float_to_int, sink)*

The process crashes with a segmentation fault.

If I nullify the Python sink (commenting out all real processing code in
work()), the issue still happens.
Furthermore, I wrote a "my_null_sink" block in Python (see code below). It
still crashes with the same issue (after I connected it to the float-to-int
output instead of the original Python sink).
When I replace "my_null_sink" with GNU Radio's standard Null Sink, it
doesn't crash anymore.
Using the same input file and my_null_sink, it crashes about 95% of the
runs (i.e., not 100%, but almost always), with Null Sink, 0%.
That's why I believe it is something with the Python binding. I do have
other Python blocks in the flowgraph (one that is connected to the file
source and does some simple processing before passing forward the samples).

When I run it with gdb, I catch the exception and the stack trace is below.
The 2nd frame in the stack sends us to *block_gateway_impl.cc:139*, work(),
*_handler->calleval(0);*
The 1st stack frame doesn't have an associated module for the specified
address (0x0000000002324b90 in ??), "i sh" shows it isn't associated with
any module, and "info symbol <addr>" confirms this. I also witness that all
modules are loaded into addresses > 0x00007f1300000000, so I assume the
address from the stack trace is really not a valid library, but some
garbage (it's also very close to 0).
The faulty memory address tends to change which is another indication for
garbage.

Note: when I build the app in Debug, another stack frame appears between
the one that isn't associated with a module, to the one in
block_gateway_impl:
*include/gnuradio/py_feval.h:69* which is *py_eval_ll::calleval(int)*:
*return eval(x);*

When I implement the simplest flowgraph: File Source with /dev/zero ->
Throttle -> my_null_sink, it doesn't crash.

In the original flowgraph, I disabled almost all blocks, and specifically,
I did not leave any enabled own C++ block - just to rule out the
possibility that one of the blocks corrupts the memory. It didn't change
anything.

I tested it on another machine with a similar setup (GNU Radio 3.8.1) and
it reproduced. On an older machine, still with GNU Radio 3.7.11.1, it works
(doesn't crash).

Any ideas will be appreciated.
------

*my_null_sink.py*















*import numpyfrom gnuradio import grclass my_null_sink(gr.sync_block):
def __init__(self):        gr.sync_block.__init__(            self,
    name="my_null_sink",            in_sig=[numpy.int32],
out_sig=None)        print('***** my_null_sink init')    def work(self,
input_items, output_items):        return len(input_items[0])*


*Exception in GDB*


*Thread 20 "my_null_sink25" received signal SIGSEGV, Segmentation fault*





















*#0  0x0000000002324b90 in ?? ()#1  0x00007f5ec43df433 in
gr::block_gateway_impl::work (this=this@entry=0x2324fc0, noutput_items=8,
  input_items=std::vector of length 1, capacity 1 = {...},
output_items=std::vector of length 0, capacity 0)    at
/home/user/gr/src/gnuradio/gnuradio-runtime/lib/block_gateway_impl.cc:139#2
 0x00007f5ec43df471 in gr::block_gateway_impl::general_work
(this=0x2324fc0, noutput_items=<optimized out>, ninput_items=...,
input_items=std::vector of length 1, capacity 1 = {...}, output_items=...)
  at
/home/user/gr/src/gnuradio/gnuradio-runtime/lib/block_gateway_impl.cc:121#3
 0x00007f5ec43dc4c4 in gr::block_executor::run_one_iteration
(this=this@entry=0x7f5e71ffadf0)    at
/home/user/gr/src/gnuradio/gnuradio-runtime/lib/block_executor.cc:514#4
 0x00007f5ec4439097 in gr::tpb_thread_body::tpb_thread_body
(this=0x7f5e71ffadf0, block=..., start_sync=...,
max_noutput_items=<optimized out>) at
/home/user/gr/src/gnuradio/gnuradio-runtime/lib/tpb_thread_body.cc:122#5
 0x00007f5ec4428932 in gr::tpb_container::operator() (this=0x2ab6640)    at
/home/user/gr/src/gnuradio/gnuradio-runtime/lib/scheduler_tpb.cc:50#6
 gr::thread::thread_body_wrapper<gr::tpb_container>::operator()
(this=0x2ab6640)    at
/home/user/gr/src/gnuradio/gnuradio-runtime/lib/../include/gnuradio/thread/thread_body_wrapper.h:52#7
 
boost::detail::function::void_function_obj_invoker0<gr::thread::thread_body_wrapper<gr::tpb_container>,
void>::invoke (function_obj_ptr=...)    at
/usr/include/boost/function/function_template.hpp:159#8  0x00007f5ec4444260
in boost::function0<void>::operator() (this=<optimized out>) at
/usr/include/boost/function/function_template.hpp:773#9
 boost::detail::thread_data<boost::function0<void> const>::run
(this=<optimized out>) at
/usr/include/boost/thread/detail/thread.hpp:116#10 0x00007f5ec27fc5d5 in ??
() from /usr/lib/x86_64-linux-gnu/libboost_thread.so.1.58.0#11
0x00007f5ee913a6ba in start_thread (arg=0x7f5e71ffb700) at
pthread_create.c:333#12 0x00007f5ee831d41d in clone () at
../sysdeps/unix/sysv/linux/x86_64/clone.S:109*
ᐧ

Reply via email to