aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/usrp/mpmd
diff options
context:
space:
mode:
authorSteven Koo <steven.koo@ni.com>2020-08-10 17:36:45 -0500
committerAaron Rossetto <aaron.rossetto@ni.com>2020-08-11 16:07:40 -0500
commitbe5bee81c4116388f6f3626b6ce1089845c4f792 (patch)
tree071d3a017575b2a43caf95515c74426305b54882 /host/lib/usrp/mpmd
parentfc3f91e0cfb77e295673ac04d310ded65863c119 (diff)
downloaduhd-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.cpp23
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;