diff options
author | Steven Koo <steven.koo@ni.com> | 2020-08-10 17:36:45 -0500 |
---|---|---|
committer | Aaron Rossetto <aaron.rossetto@ni.com> | 2020-08-11 16:07:40 -0500 |
commit | be5bee81c4116388f6f3626b6ce1089845c4f792 (patch) | |
tree | 071d3a017575b2a43caf95515c74426305b54882 /host/lib/usrp/mpmd | |
parent | fc3f91e0cfb77e295673ac04d310ded65863c119 (diff) | |
download | uhd-be5bee81c4116388f6f3626b6ce1089845c4f792.tar.gz uhd-be5bee81c4116388f6f3626b6ce1089845c4f792.tar.bz2 uhd-be5bee81c4116388f6f3626b6ce1089845c4f792.zip |
rfnoc: Resolves streamer/link segfaults on python
This commit resolves a segfault that occurs during teardown. Since
teardown isn't detereministic in python, there were cases where the
graph would destruct before the streamers or links got chance to
cleanup. This would result in a segfault. This change gives the lambda
a shared pointer to the object the callback method is calling on, so
that it won't destruct before being called.
Diffstat (limited to 'host/lib/usrp/mpmd')
-rw-r--r-- | host/lib/usrp/mpmd/mpmd_mb_iface.cpp | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/host/lib/usrp/mpmd/mpmd_mb_iface.cpp b/host/lib/usrp/mpmd/mpmd_mb_iface.cpp index 534d71a4d..a24be5c57 100644 --- a/host/lib/usrp/mpmd/mpmd_mb_iface.cpp +++ b/host/lib/usrp/mpmd/mpmd_mb_iface.cpp @@ -176,6 +176,7 @@ uhd::rfnoc::chdr_ctrl_xport::sptr mpmd_mboard_impl::mpmd_mb_iface::make_ctrl_tra recv_link, send_link, transport::link_type_t::CTRL); auto pkt_factory = _link_if_mgr->get_packet_factory(link_idx); + auto io_srv_mgr = this->get_io_srv_mgr(); auto xport = uhd::rfnoc::chdr_ctrl_xport::make(io_srv, send_link, recv_link, @@ -183,8 +184,8 @@ uhd::rfnoc::chdr_ctrl_xport::sptr mpmd_mboard_impl::mpmd_mb_iface::make_ctrl_tra local_epid, send_link->get_num_send_frames(), recv_link->get_num_recv_frames(), - [this, send_link, recv_link]() { - this->get_io_srv_mgr()->disconnect_links(recv_link, send_link); + [io_srv_mgr, send_link, recv_link]() { + io_srv_mgr->disconnect_links(recv_link, send_link); }); return xport; } @@ -242,6 +243,7 @@ mpmd_mboard_impl::mpmd_mb_iface::make_rx_data_transport( // Create the data transport auto pkt_factory = _link_if_mgr->get_packet_factory(link_idx); + auto io_srv_mgr = this->get_io_srv_mgr(); auto fc_params = chdr_rx_data_xport::configure_sep(cfg_io_srv, recv_link, send_link, @@ -254,8 +256,8 @@ mpmd_mboard_impl::mpmd_mb_iface::make_rx_data_transport( fc_freq, fc_headroom, lossy_xport, - [this, recv_link, send_link]() { - this->get_io_srv_mgr()->disconnect_links(recv_link, send_link); + [io_srv_mgr, recv_link, send_link]() { + io_srv_mgr->disconnect_links(recv_link, send_link); }); cfg_io_srv.reset(); @@ -275,8 +277,8 @@ mpmd_mboard_impl::mpmd_mb_iface::make_rx_data_transport( epids, recv_link->get_num_recv_frames(), fc_params, - [this, recv_link, send_link]() { - this->get_io_srv_mgr()->disconnect_links(recv_link, send_link); + [io_srv_mgr, recv_link, send_link]() { + io_srv_mgr->disconnect_links(recv_link, send_link); }); return rx_xport; @@ -319,6 +321,7 @@ mpmd_mboard_impl::mpmd_mb_iface::make_tx_data_transport( recv_link, send_link, transport::link_type_t::CTRL); auto pkt_factory = _link_if_mgr->get_packet_factory(link_idx); + auto io_srv_mgr = this->get_io_srv_mgr(); const auto buff_capacity = chdr_tx_data_xport::configure_sep(cfg_io_srv, recv_link, send_link, @@ -329,8 +332,8 @@ mpmd_mboard_impl::mpmd_mb_iface::make_tx_data_transport( mdata_buff_fmt, fc_freq_ratio, fc_headroom_ratio, - [this, recv_link, send_link]() { - this->get_io_srv_mgr()->disconnect_links(recv_link, send_link); + [io_srv_mgr, recv_link, send_link]() { + io_srv_mgr->disconnect_links(recv_link, send_link); }); cfg_io_srv.reset(); @@ -351,8 +354,8 @@ mpmd_mboard_impl::mpmd_mb_iface::make_tx_data_transport( epids, send_link->get_num_send_frames(), buff_capacity, - [this, recv_link, send_link]() { - this->get_io_srv_mgr()->disconnect_links(recv_link, send_link); + [io_srv_mgr, recv_link, send_link]() { + io_srv_mgr->disconnect_links(recv_link, send_link); }); return tx_xport; |