If a USRP N210 (and possibly other) radios are disconnected while in use (i.e. while streaming IQ data), the program will end with an exception thrown from within UHD. This can be VERY easily reproduced using the example UHD program rx_stream_to_file with no changes. Simply run:
/usr/lib64/uhd/examples/rx_samples_to_file --args addr=192.168.10.2 -duration 20 And wait for the streaming to start. Then disconnect the ethernet cored from the radio. The program will recognize the error and begin to exit gracefully, and then abort with the following backtrace: #0 0x00007f8d46c1e1f7 in raise () from /lib64/libc.so.6 #1 0x00007f8d46c1f8e8 in abort () from /lib64/libc.so.6 #2 0x00007f8d47524ac5 in __gnu_cxx::__verbose_terminate_handler() () from /lib64/libstdc++.so.6 #3 0x00007f8d47522a36 in ?? () from /lib64/libstdc++.so.6 #4 0x00007f8d475219e9 in ?? () from /lib64/libstdc++.so.6 #5 0x00007f8d47522654 in __gxx_personality_v0 () from /lib64/libstdc++.so.6 #6 0x00007f8d46fbb903 in ?? () from /lib64/libgcc_s.so.1 #7 0x00007f8d46fbbc9b in _Unwind_RaiseException () from /lib64/libgcc_s.so.1 #8 0x00007f8d47522c76 in __cxa_throw () from /lib64/libstdc++.so.6 #9 0x00007f8d4879f3de in udp_zero_copy_asio_msb::release (this=<optimized out>) at /usr/src/debug/uhd-3.12.0.0/host/lib/transport/udp_zero_copy.cpp:125 #10 0x00007f8d485e142e in intrusive_ptr_release (p=<optimized out>) at /usr/src/debug/uhd-3.12.0.0/host/include/uhd/transport/zero_copy.hpp:104 #11 ~intrusive_ptr (this=0x7ffe4921da80, __in_chrg=<optimized out>) at /usr/local/upe/buildtools/include/boost-1_67/boost/smart_ptr/intrusive_ptr.hpp:98 #12 send_pkt (cmd=256, data=<optimized out>, addr=<optimized out>, this=0x856890) at /usr/src/debug/uhd-3.12.0.0/host/lib/usrp/usrp2/usrp2_fifo_ctrl.cpp:165 #13 usrp2_fifo_ctrl_impl::poke32 (this=0x856890, addr=<optimized out>, data=<optimized out>) at /usr/src/debug/uhd-3.12.0.0/host/lib/usrp/usrp2/usrp2_fifo_ctrl.cpp:63 #14 0x00007f8d4830e245 in rx_dsp_core_200_impl::issue_stream_command (this=0x859200, stream_cmd=...) at /usr/src/debug/uhd-3.12.0.0/host/lib/usrp/cores/rx_dsp_core_200.cpp:130 #15 0x00007f8d48505f0b in operator() (a0=..., this=<optimized out>) at /usr/local/upe/buildtools/include/boost-1_67/boost/function/function_template.hpp:768 #16 issue_stream_cmd (stream_cmd=..., this=0x873718) at /usr/src/debug/uhd-3.12.0.0/host/lib/transport/super_recv_packet_handler.hpp:223 #17 uhd::transport::sph::recv_packet_streamer::issue_stream_cmd (this=0x873710, stream_cmd=...) at /usr/src/debug/uhd-3.12.0.0/host/lib/transport/super_recv_packet_handler.hpp:842 #18 0x000000000042e246 in recv_to_file<std::complex<short> > (usrp=..., cpu_format="sc16", wire_format="sc16", channel="0", file="usrp_samples.dat", samps_per_buff=samps_per_buff@entry=10000, num_requested_samples=0, time_requested=time_requested@entry=20, bw_summary=false, stats=false, null=false, enable_size_map=false, continue_on_bad_packet=false) at /usr/src/debug/uhd-3.12.0.0/host/examples/rx_samples_to_file.cpp:152 #19 0x000000000041cbe2 in _main (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/uhd-3.12.0.0/host/examples/rx_samples_to_file.cpp:387 #20 0x000000000041a1bb in main (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/uhd-3.12.0.0/host/examples/rx_samples_to_file.cpp:227 This wouldn't be such a huge problem except that the exception is thrown from a destructor (~intrusive_ptr()), which means it cannot be caught in a C++ program. Has anyone found a solution or workaround to this problem? We are currently using UHD 3.12.0.0. Thanks Will
_______________________________________________ USRP-users mailing list USRP-users@lists.ettus.com http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com