diff options
| author | Mark Meserve <mark.meserve@ni.com> | 2018-04-10 13:35:19 -0500 | 
|---|---|---|
| committer | Martin Braun <martin.braun@ettus.com> | 2018-04-10 15:02:52 -0700 | 
| commit | ff3179fef651ec3ef6ff4b6d693a00de4a240104 (patch) | |
| tree | f977087fa91e713a523db4c8ac4fb3644d051524 | |
| parent | fbd491862528d19f840dc3a6ab0a95ca1f95d2c4 (diff) | |
| download | uhd-ff3179fef651ec3ef6ff4b6d693a00de4a240104.tar.gz uhd-ff3179fef651ec3ef6ff4b6d693a00de4a240104.tar.bz2 uhd-ff3179fef651ec3ef6ff4b6d693a00de4a240104.zip  | |
x300: handle bad weak_ptr during pcie discovery
| -rw-r--r-- | host/lib/usrp/x300/x300_impl.cpp | 10 | 
1 files changed, 9 insertions, 1 deletions
diff --git a/host/lib/usrp/x300/x300_impl.cpp b/host/lib/usrp/x300/x300_impl.cpp index 97551e07a..d74aad806 100644 --- a/host/lib/usrp/x300/x300_impl.cpp +++ b/host/lib/usrp/x300/x300_impl.cpp @@ -213,7 +213,15 @@ static device_addrs_t x300_find_pcie(const device_addr_t &hint, bool explicit_qu              if (get_pcie_zpu_iface_registry().has_key(resource_d)) {                  zpu_ctrl = get_pcie_zpu_iface_registry()[resource_d].lock(); -            } else { +                if (!zpu_ctrl) +                { +                    get_pcie_zpu_iface_registry().pop(resource_d); +                } +            } + +            // if the registry didn't have a key OR that key was an orphaned weak_ptr +            if (!zpu_ctrl) +            {                  zpu_ctrl = x300_make_ctrl_iface_pcie(kernel_proxy, false /* suppress timeout errors */);                  //We don't put this zpu_ctrl in the registry because we need                  //a persistent niriok_proxy associated with the object  | 
