Skip to content

Blocking thread preventing osmo-trx to shutdown properly #29

@clebig

Description

@clebig

Hi,

I'm using the master branch of UHD-Fairwaves for which I had to apply #27 to fix #26.

OS : Debian Testing amd64
GCC : 10.2.0
libboost 1.71

I have compiled osmo-trx-uhd to use it with UmTRX. However, it doesn't stop properly. It gets stuck after SIGTEM or SIGINT.
I have to SIGKILL to exit.

The osmo-trx code doesn't seem the source of the problem.

if I ctrl-c osmo-trx, I gets stuck :

^CTue Dec 8 17:03:35 2020 DMAIN <0000> osmo-trx.cpp:609 [tid=139644193412480] -- Transceiver active with 1 channel(s) signal 2 received shutting down Tue Dec 8 17:03:35 2020 DMAIN <0000> osmo-trx.cpp:566 [tid=139644193412480] Shutting down transceiver... ^C^C

When I strace on the blocking process, I have the screen flooded with

poll([{fd=24, events=POLLIN}], 1, 100) = 1 ([{fd=24, revents=POLLIN}]) recvfrom(24, "P\22\0\6\0\0\0\2\0\0\0\30\305X\233\361\0\0\0\0\377\377\377\377", 1472, 0, NULL, NULL) = 24 recvfrom(24, 0x55dce26565d0, 1472, MSG_DONTWAIT, NULL, NULL) = -1 EAGAIN (Ressource temporairement non disponible) poll([{fd=24, events=POLLIN}], 1, 100^Cstrace: Process 19537 detached <detached ...>

Here a gdb backtrace of this pid

(gdb) bt #0 0x00007f5ee31aa35f in __GI___poll (fds=0x7f5edd382610, nfds=1, timeout=100) at ../sysdeps/unix/sysv/linux/poll.c:29 #1 0x00007f5ee3f71605 in udp_zero_copy_asio_impl::get_recv_buff(double) () from /usr/local/lib/libuhd.so.3.15.0 #2 0x00007f5ee0d33ff9 in handle_tx_async_msgs(unsigned long, double, boost::shared_ptr<flow_control_monitor>, boost::shared_ptr<uhd::transport::zero_copy_if>, boost::function<void ()>, boost::shared_ptr<uhd::transport::bounded_buffer<uhd::async_metadata_t> >, boost::shared_ptr<uhd::transport::bounded_buffer<uhd::async_metadata_t> >) () from /usr/local/lib/uhd/modules/libumtrx.so #3 0x00007f5ee0d4e603 in void boost::_bi::list7<boost::_bi::value<unsigned long>, boost::_bi::value<double>, boost::_bi::value<boost::shared_ptr<flow_control_monitor> >, boost::_bi::value<boost::shared_ptr<uhd::transport::zero_copy_if> >, boost::_bi::value<boost::function<void ()> >, boost::_bi::value<boost::shared_ptr<uhd::transport::bounded_buffer<uhd::async_metadata_t> > >, boost::_bi::value<boost::shared_ptr<uhd::transport::bounded_buffer<uhd::async_metadata_t> > > >::operator()<void (*)(unsigned long, double, boost::shared_ptr<flow_control_monitor>, boost::shared_ptr<uhd::transport::zero_copy_if>, boost::function<void ()>, boost::shared_ptr<uhd::transport::bounded_buffer<uhd::async_metadata_t> >, boost::shared_ptr<uhd::transport::bounded_buffer<uhd::async_metadata_t> >), boost::_bi::list0>(boost::_bi::type<void>, void (*&)(unsigned long, double, boost::shared_ptr<flow_control_monitor>, boost::shared_ptr<uhd::transport::zero_copy_if>, boost::function<void ()>, boost::shared_ptr<uhd::transport::bounded_buffer<uhd::async_metadata_t> >, boost::shared_ptr<uhd::transport::bounded_buffer<uhd::async_metadata_t> >), boost::_bi::list0&, int) () from /usr/local/lib/uhd/modules/libumtrx.so #4 0x00007f5ee0d4ca07 in boost::_bi::bind_t<void, void (*)(unsigned long, double, boost::shared_ptr<flow_control_monitor>, boost::shared_ptr<uhd::transport::zero_copy_if>, boost::function<void ()>, boost::shared_ptr<uhd::transport::bounded_buffer<uhd::async_metadata_t> >, boost::shared_ptr<uhd::transport::bounded_buffer<uhd::async_metadata_t> >), boost::_bi::list7<boost::_bi::value<unsigned long>, boost::_bi::value<double>, boost::_bi::value<boost::shared_ptr<flow_control_monitor> >, boost::_bi::value<boost::shared_ptr<uhd::transport::zero_copy_if> >, boost::_--Type <RET> for more, q to quit, c to continue without paging-- bi::value<boost::function<void ()> >, boost::_bi::value<boost::shared_ptr<uhd::transport::bounded_buffer<uhd::async_metadata_t> > >, boost::_bi::value<boost::shared_ptr<uhd::transport::bounded_buffer<uhd::async_metadata_t> > > > >::operator()() () from /usr/local/lib/uhd/modules/libumtrx.so #5 0x00007f5ee0d4b0f9 in boost::detail::function::void_function_obj_invoker0<boost::_bi::bind_t<void, void (*)(unsigned long, double, boost::shared_ptr<flow_control_monitor>, boost::shared_ptr<uhd::transport::zero_copy_if>, boost::function<void ()>, boost::shared_ptr<uhd::transport::bounded_buffer<uhd::async_metadata_t> >, boost::shared_ptr<uhd::transport::bounded_buffer<uhd::async_metadata_t> >), boost::_bi::list7<boost::_bi::value<unsigned long>, boost::_bi::value<double>, boost::_bi::value<boost::shared_ptr<flow_control_monitor> >, boost::_bi::value<boost::shared_ptr<uhd::transport::zero_copy_if> >, boost::_bi::value<boost::function<void ()> >, boost::_bi::value<boost::shared_ptr<uhd::transport::bounded_buffer<uhd::async_metadata_t> > >, boost::_bi::value<boost::shared_ptr<uhd::transport::bounded_buffer<uhd::async_metadata_t> > > > >, void>::invoke(boost::detail::function::function_buffer&) () from /usr/local/lib/uhd/modules/libumtrx.so #6 0x00007f5ee3f39b93 in task_impl::task_loop(boost::function<void ()> const&) () from /usr/local/lib/libuhd.so.3.15.0 #7 0x00007f5ee34a8ed0 in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6 #8 0x00007f5ee45d1ea7 in start_thread (arg=<optimized out>) at pthread_create.c:477 #9 0x00007f5ee31b4d4f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions