From 09149bbf7d28f67e68d65f7ba153ccd31ae48e5b Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Thu, 10 Mar 2011 14:37:34 -0800 Subject: usrp1: safe destruction for usrp1 device --- host/lib/usrp/usrp1/usrp1_impl.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'host/lib/usrp/usrp1/usrp1_impl.cpp') diff --git a/host/lib/usrp/usrp1/usrp1_impl.cpp b/host/lib/usrp/usrp1/usrp1_impl.cpp index caea7c043..7005c59f2 100644 --- a/host/lib/usrp/usrp1/usrp1_impl.cpp +++ b/host/lib/usrp/usrp1/usrp1_impl.cpp @@ -19,6 +19,7 @@ #include "usrp1_ctrl.hpp" #include "fpga_regs_standard.h" #include "usrp_spi_defs.h" +#include #include #include #include @@ -199,7 +200,16 @@ usrp1_impl::usrp1_impl(uhd::transport::usb_zero_copy::sptr data_transport, } usrp1_impl::~usrp1_impl(void){ - /* NOP */ + //Safely destruct all RAII objects in a device. + //This prevents the mboard deconstructor from throwing, + //which allows the device to be safely deconstructed. + BOOST_FOREACH(dboard_slot_t slot, _dboard_slots){ + UHD_SAFE_CALL(_dboard_managers[slot].reset();) + UHD_SAFE_CALL(_dboard_ifaces[slot].reset();) + UHD_SAFE_CALL(_codec_ctrls[slot].reset();) + } + UHD_SAFE_CALL(_clock_ctrl.reset();) + UHD_SAFE_CALL(_io_impl.reset();) } bool usrp1_impl::recv_async_msg(uhd::async_metadata_t &, double timeout){ -- cgit v1.2.3