diff options
| author | Martin Braun <martin.braun@ettus.com> | 2021-07-06 16:51:55 +0200 | 
|---|---|---|
| committer | Aaron Rossetto <aaron.rossetto@ni.com> | 2021-10-19 12:21:33 -0700 | 
| commit | b6119e581e6ea9273b188463dc4529c30db140ba (patch) | |
| tree | 11517bfd9cff0f0e37120b10c72b4387f7d509a6 | |
| parent | 01d81c7fa5e43210a40c61ce39287c7be245f7c4 (diff) | |
| download | uhd-b6119e581e6ea9273b188463dc4529c30db140ba.tar.gz uhd-b6119e581e6ea9273b188463dc4529c30db140ba.tar.bz2 uhd-b6119e581e6ea9273b188463dc4529c30db140ba.zip | |
uhd: Replace Boost mutexes and locks with standard options
This is a very mechanical task that could almost have been done with
sed. Boost versions of mutexes and locks were removed, and replaced with
std:: versions. The replacement tables are as follows:
== Mutexes ==
- boost::mutex -> std::mutex
- boost::recursive_mutex -> std::recursive_mutex
Mutexes behave identically between Boost and std:: and have the same
API.
== Locks ==
C++11 has only two types of lock that we use/need in UHD:
- std::lock_guard: Identical to boost::lock_guard
- std::unique_lock: Identical to boost::unique_lock
Boost also has boost::mutex::scoped_lock, which is a typedef for
boost::unique_lock<>. However, we often have used scoped_lock where we
meant to use lock_guard<>. The name is a bit misleading, "scoped lock"
sounding a bit like an RAII mechanism. Therefore, some previous
boost::mutex::scoped_lock are now std::lock_guard<>.
std::unique_lock is required when doing more than RAII locking (i.e.,
unlocking, relocking, usage with condition variables, etc.).
== Condition Variables ==
Condition variables were out of the scope of this lock/mutex change, but
in UHD, we inconsistently use boost::condition vs.
boost::condition_variable. The former is a templated version of the
latter, and thus works fine with std::mutex'es. Therefore, some
boost::condition_variable where changed to boost::condition.
All locks and mutexes use `#include <mutex>`. The corresponding Boost
includes were removed. In some cases, this exposed issues with implicit
Boost includes elsewhere. The missing explicit includes were added.
40 files changed, 292 insertions, 297 deletions
| diff --git a/host/examples/network_relay.cpp b/host/examples/network_relay.cpp index 15c6de4ef..910584452 100644 --- a/host/examples/network_relay.cpp +++ b/host/examples/network_relay.cpp @@ -8,15 +8,15 @@  #include <uhd/utils/safe_main.hpp>  #include <uhd/utils/thread.hpp>  #include <boost/asio.hpp> -#include <boost/format.hpp>  #include <boost/program_options.hpp> -#include <boost/thread/condition_variable.hpp> +#include <boost/thread/condition.hpp>  #include <boost/thread/thread.hpp>  #include <chrono>  #include <csignal>  #include <cstdlib>  #include <functional>  #include <iostream> +#include <mutex>  #include <thread>  #include <vector> @@ -99,7 +99,7 @@ public:          }          std::cout << "spawning relay threads... " << _port << std::endl; -        boost::unique_lock<boost::mutex> lock( +        std::unique_lock<std::mutex> lock(              spawn_mutex); // lock in preparation to wait for threads to spawn          (void)_thread_group.create_thread(              std::bind(&udp_relay_type::server_thread, this)); @@ -134,7 +134,7 @@ private:          std::vector<char> buff(insane_mtu);          while (not boost::this_thread::interruption_requested()) {              if (wait_for_recv_ready(_server_socket->native_handle())) { -                boost::mutex::scoped_lock lock(_endpoint_mutex); +                std::unique_lock<std::mutex> lock(_endpoint_mutex);                  const size_t len = _server_socket->receive_from(                      asio::buffer(&buff.front(), buff.size()), _endpoint);                  lock.unlock(); @@ -164,7 +164,7 @@ private:              if (wait_for_recv_ready(_client_socket->native_handle())) {                  const size_t len =                      _client_socket->receive(asio::buffer(&buff.front(), buff.size())); -                boost::mutex::scoped_lock lock(_endpoint_mutex); +                std::lock_guard<std::mutex> lock(_endpoint_mutex);                  _server_socket->send_to(asio::buffer(&buff.front(), len), _endpoint);              }          } @@ -175,10 +175,10 @@ private:      boost::thread_group _thread_group;      asio::io_service _io_service;      asio::ip::udp::endpoint _endpoint; -    boost::mutex _endpoint_mutex; +    std::mutex _endpoint_mutex;      socket_type _server_socket, _client_socket; -    boost::mutex spawn_mutex; -    boost::condition_variable wait_for_thread; +    std::mutex spawn_mutex; +    boost::condition wait_for_thread;  }; @@ -206,7 +206,7 @@ int UHD_SAFE_MAIN(int argc, char* argv[])      // print the help message      if (vm.count("help") or not vm.count("addr")) { -        std::cout << boost::format("UHD Network Relay %s") % desc << std::endl +        std::cout << "UHD Network Relay " << desc << std::endl                    << "Runs a network relay between UHD on one computer and a USRP on the "                       "network.\n"                    << "This example is basically for test purposes. Use at your own " diff --git a/host/include/uhd/transport/bounded_buffer.ipp b/host/include/uhd/transport/bounded_buffer.ipp index 3e15fc03a..122b3d740 100644 --- a/host/include/uhd/transport/bounded_buffer.ipp +++ b/host/include/uhd/transport/bounded_buffer.ipp @@ -11,9 +11,9 @@  #include <uhd/utils/noncopyable.hpp>  #include <boost/circular_buffer.hpp>  #include <boost/thread/condition.hpp> -#include <boost/thread/locks.hpp>  #include <boost/utility.hpp>  #include <functional> +#include <mutex>  namespace uhd{ namespace transport{ @@ -30,9 +30,8 @@ namespace uhd{ namespace transport{          UHD_INLINE bool push_with_haste(const elem_type &elem)          { -            boost::mutex::scoped_lock lock(_mutex); -            if (_buffer.full()) -            { +            std::unique_lock<std::mutex> lock(_mutex); +            if (_buffer.full()) {                  return false;              }              _buffer.push_front(elem); @@ -42,15 +41,13 @@ namespace uhd{ namespace transport{          UHD_INLINE bool push_with_pop_on_full(const elem_type &elem)          { -            boost::mutex::scoped_lock lock(_mutex); -            if (_buffer.full()) -            { +            std::lock_guard<std::mutex> lock(_mutex); +            if (_buffer.full()) {                  _buffer.pop_back();                  _buffer.push_front(elem);                  _empty_cond.notify_one();                  return false; -            } -            else { +            } else {                  _buffer.push_front(elem);                  _empty_cond.notify_one();                  return true; @@ -59,7 +56,7 @@ namespace uhd{ namespace transport{          UHD_INLINE void push_with_wait(const elem_type &elem)          { -            boost::mutex::scoped_lock lock(_mutex); +            std::unique_lock<std::mutex> lock(_mutex);              if (_buffer.full())              {                  _full_cond.wait(lock, _not_full_fcn); @@ -70,7 +67,7 @@ namespace uhd{ namespace transport{          UHD_INLINE bool push_with_timed_wait(const elem_type &elem, double timeout)          { -            boost::mutex::scoped_lock lock(_mutex); +            std::unique_lock<std::mutex> lock(_mutex);              if (_buffer.full())              {                  if (not _full_cond.timed_wait(lock, @@ -86,9 +83,8 @@ namespace uhd{ namespace transport{          UHD_INLINE bool pop_with_haste(elem_type &elem)          { -            boost::mutex::scoped_lock lock(_mutex); -            if (_buffer.empty())  -            { +            std::unique_lock<std::mutex> lock(_mutex); +            if (_buffer.empty()) {                  return false;              }              this->pop_back(elem); @@ -98,7 +94,7 @@ namespace uhd{ namespace transport{          UHD_INLINE void pop_with_wait(elem_type &elem)          { -            boost::mutex::scoped_lock lock(_mutex); +            std::unique_lock<std::mutex> lock(_mutex);              if (_buffer.empty())              {                  _empty_cond.wait(lock, _not_empty_fcn); @@ -109,9 +105,8 @@ namespace uhd{ namespace transport{          UHD_INLINE bool pop_with_timed_wait(elem_type &elem, double timeout)          { -            boost::mutex::scoped_lock lock(_mutex); -            if (_buffer.empty())  -            { +            std::unique_lock<std::mutex> lock(_mutex); +            if (_buffer.empty()) {                  if (not _empty_cond.timed_wait(lock, to_time_dur(timeout),                      _not_empty_fcn))                  { @@ -124,7 +119,7 @@ namespace uhd{ namespace transport{          }      private: -        boost::mutex _mutex; +        std::mutex _mutex;          boost::condition _empty_cond, _full_cond;          boost::circular_buffer<elem_type> _buffer; diff --git a/host/include/uhd/transport/nirio/nirio_fifo.h b/host/include/uhd/transport/nirio/nirio_fifo.h index 0cd9f1906..71b9563c3 100644 --- a/host/include/uhd/transport/nirio/nirio_fifo.h +++ b/host/include/uhd/transport/nirio/nirio_fifo.h @@ -13,12 +13,12 @@  #include <uhd/transport/nirio/niriok_proxy.h>  #include <uhd/transport/nirio/status.h>  #include <uhd/utils/noncopyable.hpp> -#include <boost/thread/recursive_mutex.hpp>  #include <atomic> -#include <string>  #include <chrono> +#include <cstdint> +#include <mutex> +#include <string>  #include <thread> -#include <stdint.h>  namespace uhd { namespace niusrprio { @@ -213,7 +213,7 @@ private:    //Members      size_t                         _remaining_in_claimed_block;      size_t                         _remaining_acquirable_elements;      nirio_driver_iface::rio_mmap_t _mem_map; -    boost::recursive_mutex         _mutex; +    std::recursive_mutex           _mutex;      niriok_proxy::sptr             _riok_proxy_ptr;      uint64_t                       _expected_xfer_count; diff --git a/host/include/uhd/transport/nirio/nirio_fifo.ipp b/host/include/uhd/transport/nirio/nirio_fifo.ipp index 048616b4c..12058aa70 100644 --- a/host/include/uhd/transport/nirio/nirio_fifo.ipp +++ b/host/include/uhd/transport/nirio/nirio_fifo.ipp @@ -61,7 +61,7 @@ nirio_status nirio_fifo<data_t>::initialize(  {      nirio_status status = NiRio_Status_Success;      if (!_riok_proxy_ptr) return NiRio_Status_ResourceNotInitialized; -    boost::unique_lock<boost::recursive_mutex> lock(_mutex); +    std::unique_lock<std::recursive_mutex> lock(_mutex);      if (_state == UNMAPPED) { @@ -101,7 +101,7 @@ nirio_status nirio_fifo<data_t>::initialize(  template <typename data_t>  void nirio_fifo<data_t>::finalize()  { -    boost::unique_lock<boost::recursive_mutex> lock(_mutex); +    std::unique_lock<std::recursive_mutex> lock(_mutex);      //If the FIFO is started, the stop will change the state to MAPPED.      stop(); @@ -200,7 +200,7 @@ nirio_status nirio_fifo<data_t>::start()      nirio_status status = NiRio_Status_Success;      if (!_riok_proxy_ptr) return NiRio_Status_ResourceNotInitialized; -    boost::unique_lock<boost::recursive_mutex> lock(_mutex); +    std::unique_lock<std::recursive_mutex> lock(_mutex);      if (_state == STARTED) {          //Do nothing. Already started. @@ -237,7 +237,7 @@ nirio_status nirio_fifo<data_t>::stop()      nirio_status status = NiRio_Status_Success;      if (!_riok_proxy_ptr) return NiRio_Status_ResourceNotInitialized; -    boost::unique_lock<boost::recursive_mutex> lock(_mutex); +    std::unique_lock<std::recursive_mutex> lock(_mutex);      if (_state == STARTED) { @@ -266,7 +266,7 @@ nirio_status nirio_fifo<data_t>::acquire(      nirio_status status = NiRio_Status_Success;      if (!_riok_proxy_ptr || _mem_map.is_null()) return NiRio_Status_ResourceNotInitialized; -    boost::unique_lock<boost::recursive_mutex> lock(_mutex); +    std::unique_lock<std::recursive_mutex> lock(_mutex);      if (_state == STARTED) { @@ -320,7 +320,7 @@ nirio_status nirio_fifo<data_t>::release(const size_t elements)      nirio_status status = NiRio_Status_Success;      if (!_riok_proxy_ptr) return NiRio_Status_ResourceNotInitialized; -    boost::unique_lock<boost::recursive_mutex> lock(_mutex); +    std::unique_lock<std::recursive_mutex> lock(_mutex);      if (_state == STARTED) {          status = _riok_proxy_ptr->grant_fifo( @@ -345,7 +345,7 @@ nirio_status nirio_fifo<data_t>::read(      nirio_status status = NiRio_Status_Success;      if (!_riok_proxy_ptr) return NiRio_Status_ResourceNotInitialized; -    boost::unique_lock<boost::recursive_mutex> lock(_mutex); +    std::unique_lock<std::recursive_mutex> lock(_mutex);      if (_state == STARTED) {          status = _riok_proxy_ptr->read_fifo( @@ -375,7 +375,7 @@ nirio_status nirio_fifo<data_t>::write(      nirio_status status = NiRio_Status_Success;      if (!_riok_proxy_ptr) return NiRio_Status_ResourceNotInitialized; -    boost::unique_lock<boost::recursive_mutex> lock(_mutex); +    std::unique_lock<std::recursive_mutex> lock(_mutex);      if (_state == STARTED) {          status = _riok_proxy_ptr->write_fifo( diff --git a/host/include/uhd/transport/nirio/niusrprio_session.h b/host/include/uhd/transport/nirio/niusrprio_session.h index 183f766cc..432c3cd90 100644 --- a/host/include/uhd/transport/nirio/niusrprio_session.h +++ b/host/include/uhd/transport/nirio/niusrprio_session.h @@ -13,8 +13,8 @@  #include <uhd/transport/nirio/niriok_proxy.h>  #include <uhd/transport/nirio/rpc/usrprio_rpc_client.hpp>  #include <uhd/utils/noncopyable.hpp> -#include <stdint.h> -#include <boost/thread/recursive_mutex.hpp> +#include <cstdint> +#include <mutex>  #include <string>  namespace uhd { namespace niusrprio { @@ -103,7 +103,7 @@ private:      niriok_proxy::sptr _riok_proxy;      nirio_resource_manager _resource_manager;      usrprio_rpc::usrprio_rpc_client _rpc_client; -    boost::recursive_mutex _session_mutex; +    std::recursive_mutex _session_mutex;  };  }} // namespace uhd::niusrprio diff --git a/host/include/uhd/transport/nirio/rpc/rpc_client.hpp b/host/include/uhd/transport/nirio/rpc/rpc_client.hpp index 9361b7276..844e36c76 100644 --- a/host/include/uhd/transport/nirio/rpc/rpc_client.hpp +++ b/host/include/uhd/transport/nirio/rpc/rpc_client.hpp @@ -11,9 +11,11 @@  #include <uhd/utils/log.hpp>  #include <uhd/utils/noncopyable.hpp>  #include <boost/asio.hpp> -#include <boost/thread/condition_variable.hpp> -#include <boost/thread/thread.hpp> +#include <boost/date_time/posix_time/posix_time_types.hpp> +#include <boost/thread.hpp> +#include <boost/thread/condition.hpp>  #include <memory> +#include <mutex>  namespace uhd { namespace usrprio_rpc { @@ -76,8 +78,8 @@ private:      func_xport_buf_t _request;      func_xport_buf_t _response;      // Synchronization -    boost::mutex _mutex; -    boost::condition_variable _exec_gate; +    std::mutex _mutex; +    boost::condition _exec_gate;      boost::system::error_code _exec_err;  }; diff --git a/host/include/uhd/utils/soft_register.hpp b/host/include/uhd/utils/soft_register.hpp index e38ffedfe..d23d1b8fb 100644 --- a/host/include/uhd/utils/soft_register.hpp +++ b/host/include/uhd/utils/soft_register.hpp @@ -11,12 +11,11 @@  #include <uhd/types/wb_iface.hpp>  #include <uhd/utils/dirty_tracked.hpp>  #include <uhd/utils/noncopyable.hpp> -#include <stdint.h>  #include <unordered_map> -#include <boost/thread/locks.hpp> -#include <boost/thread/mutex.hpp>  #include <boost/tokenizer.hpp> +#include <cstdint>  #include <list> +#include <mutex>  /*! \file soft_register.hpp   * Utilities to access and index hardware registers. @@ -329,48 +328,48 @@ public:      UHD_INLINE void initialize(wb_iface& iface, bool sync = false)      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          soft_register_t<reg_data_t, readable, writable>::initialize(iface, sync);      }      UHD_INLINE void set(const soft_reg_field_t field, const reg_data_t value)      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          soft_register_t<reg_data_t, readable, writable>::set(field, value);      }      UHD_INLINE reg_data_t get(const soft_reg_field_t field)      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          return soft_register_t<reg_data_t, readable, writable>::get(field);      }      UHD_INLINE void flush()      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          soft_register_t<reg_data_t, readable, writable>::flush();      }      UHD_INLINE void refresh()      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          soft_register_t<reg_data_t, readable, writable>::refresh();      }      UHD_INLINE void write(const soft_reg_field_t field, const reg_data_t value)      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          soft_register_t<reg_data_t, readable, writable>::write(field, value);      }      UHD_INLINE reg_data_t read(const soft_reg_field_t field)      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          return soft_register_t<reg_data_t, readable, writable>::read(field);      }  private: -    boost::mutex _mutex; +    std::mutex _mutex;  };  /* @@ -483,7 +482,7 @@ public:       */      void initialize(wb_iface& iface, bool sync = false)      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          for (soft_register_base* reg : _reglist) {              reg->initialize(iface, sync);          } @@ -496,7 +495,7 @@ public:       */      void flush()      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          for (soft_register_base* reg : _reglist) {              reg->flush();          } @@ -509,7 +508,7 @@ public:       */      void refresh()      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          for (soft_register_base* reg : _reglist) {              reg->refresh();          } @@ -555,7 +554,7 @@ protected:          const std::string& name,          const visibility_t visible = PRIVATE)      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          if (visible == PUBLIC) {              // Only add to the map if this register is publicly visible              if (not _regmap.insert(regmap_t::value_type(name, ®)).second) { @@ -573,7 +572,7 @@ private:      const std::string _name;      regmap_t _regmap; // For lookups      reglist_t _reglist; // To maintain order -    boost::mutex _mutex; +    std::mutex _mutex;  }; @@ -611,7 +610,7 @@ public:       */      void add(soft_regmap_t& regmap)      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          _regmaps.push_back(®map);      } @@ -620,7 +619,7 @@ public:       */      void add(soft_regmap_db_t& db)      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          if (&db == this) {              throw uhd::assertion_error("cannot add regmap db to itself" + _name);          } else { @@ -700,7 +699,7 @@ private:      const std::string _name;      db_t _regmaps;      db_t _regmap_dbs; -    boost::mutex _mutex; +    std::mutex _mutex;  };  } // namespace uhd diff --git a/host/lib/device.cpp b/host/lib/device.cpp index 62277134b..0d64b4f4c 100644 --- a/host/lib/device.cpp +++ b/host/lib/device.cpp @@ -12,16 +12,15 @@  #include <uhd/utils/log.hpp>  #include <uhd/utils/static.hpp>  #include <uhdlib/utils/prefs.hpp> -#include <boost/format.hpp>  #include <boost/functional/hash.hpp> -#include <boost/thread/mutex.hpp>  #include <future>  #include <memory> +#include <mutex>  #include <tuple>  using namespace uhd; -static boost::mutex _device_mutex; +static std::mutex _device_mutex;  /***********************************************************************   * Helper Functions @@ -82,7 +81,7 @@ device::~device(void)   **********************************************************************/  device_addrs_t device::find(const device_addr_t& hint, device_filter_t filter)  { -    boost::mutex::scoped_lock lock(_device_mutex); +    std::lock_guard<std::mutex> lock(_device_mutex);      device_addrs_t device_addrs;      std::vector<std::future<device_addrs_t>> find_tasks; @@ -110,7 +109,7 @@ device_addrs_t device::find(const device_addr_t& hint, device_filter_t filter)   **********************************************************************/  device::sptr device::make(const device_addr_t& hint, device_filter_t filter, size_t which)  { -    boost::mutex::scoped_lock lock(_device_mutex); +    std::lock_guard<std::mutex> lock(_device_mutex);      typedef std::tuple<device_addr_t, make_t> dev_addr_make_t;      std::vector<dev_addr_make_t> dev_addr_makers; @@ -132,13 +131,13 @@ device::sptr device::make(const device_addr_t& hint, device_filter_t filter, siz      // check that we found any devices      if (dev_addr_makers.empty()) {          throw uhd::key_error( -            str(boost::format("No devices found for ----->\n%s") % hint.to_pp_string())); +            std::string("No devices found for ----->\n") + hint.to_pp_string());      }      // check that the which index is valid      if (dev_addr_makers.size() <= which) { -        throw uhd::index_error(str(boost::format("No device at index %d for ----->\n%s") -                                   % which % hint.to_pp_string())); +        throw uhd::index_error("No device at index " + std::to_string(which) +                               + " for ----->\n" + hint.to_pp_string());      }      // create a unique hash for the device address @@ -146,7 +145,7 @@ device::sptr device::make(const device_addr_t& hint, device_filter_t filter, siz      make_t maker;      std::tie(dev_addr, maker) = dev_addr_makers.at(which);      size_t dev_hash           = hash_device_addr(dev_addr); -    UHD_LOGGER_TRACE("UHD") << boost::format("Device hash: %u") % dev_hash; +    UHD_LOGGER_TRACE("UHD") << "Device hash: " << dev_hash;      // copy keys that were in hint but not in dev_addr      // this way, we can pass additional transport arguments diff --git a/host/lib/error_c.cpp b/host/lib/error_c.cpp index 0914ca4e7..fcfa5ce06 100644 --- a/host/lib/error_c.cpp +++ b/host/lib/error_c.cpp @@ -8,8 +8,8 @@  #include <uhd/error.h>  #include <uhd/exception.hpp>  #include <uhd/utils/static.hpp> -#include <boost/thread/mutex.hpp>  #include <cstring> +#include <mutex>  #define MAP_TO_ERROR(exception_type, error_type)     \      if (dynamic_cast<const uhd::exception_type*>(e)) \ @@ -40,17 +40,17 @@ uhd_error error_from_uhd_exception(const uhd::exception* e)  // get_c_global_error_string() instead.  UHD_SINGLETON_FCN(std::string, _c_global_error_string) -static boost::mutex _error_c_mutex; +static std::mutex _error_c_mutex;  std::string get_c_global_error_string()  { -    boost::mutex::scoped_lock lock(_error_c_mutex); +    std::lock_guard<std::mutex> lock(_error_c_mutex);      return _c_global_error_string();  }  void set_c_global_error_string(const std::string& msg)  { -    boost::mutex::scoped_lock lock(_error_c_mutex); +    std::lock_guard<std::mutex> lock(_error_c_mutex);      _c_global_error_string() = msg;  } diff --git a/host/lib/experts/expert_container.cpp b/host/lib/experts/expert_container.cpp index 0658e9fa3..0fc159a98 100644 --- a/host/lib/experts/expert_container.cpp +++ b/host/lib/experts/expert_container.cpp @@ -14,9 +14,9 @@  #include <boost/graph/graph_traits.hpp>  #include <boost/graph/topological_sort.hpp>  #include <boost/thread.hpp> -#include <boost/thread/mutex.hpp>  #include <functional>  #include <memory> +#include <mutex>  #ifdef UHD_EXPERT_LOGGING  #    define EX_LOG(depth, str) _log(depth, str) @@ -79,8 +79,8 @@ public:      void resolve_all(bool force = false) override      { -        boost::lock_guard<boost::recursive_mutex> resolve_lock(_resolve_mutex); -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::recursive_mutex> resolve_lock(_resolve_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          EX_LOG(0, str(boost::format("resolve_all(%s)") % (force ? "force" : "")));          // Do a full resolve of the graph          _resolve_helper("", "", force); @@ -88,8 +88,8 @@ public:      void resolve_from(const std::string&) override      { -        boost::lock_guard<boost::recursive_mutex> resolve_lock(_resolve_mutex); -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::recursive_mutex> resolve_lock(_resolve_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          EX_LOG(0, "resolve_from (overridden to resolve_all)");          // Do a full resolve of the graph          // Not optimizing the traversal using node_name to reduce experts complexity @@ -98,8 +98,8 @@ public:      void resolve_to(const std::string&) override      { -        boost::lock_guard<boost::recursive_mutex> resolve_lock(_resolve_mutex); -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::recursive_mutex> resolve_lock(_resolve_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          EX_LOG(0, "resolve_to (overridden to resolve_all)");          // Do a full resolve of the graph          // Not optimizing the traversal using node_name to reduce experts complexity @@ -271,7 +271,7 @@ public:  #endif      } -    inline boost::recursive_mutex& resolve_mutex() override +    inline std::recursive_mutex& resolve_mutex() override      {          return _resolve_mutex;      } @@ -279,7 +279,7 @@ public:  protected:      void add_data_node(dag_vertex_t* data_node, auto_resolve_mode_t resolve_mode) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          // Sanity check node pointer          if (data_node == NULL) { @@ -330,7 +330,7 @@ protected:      void add_worker(worker_node_t* worker) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          // Sanity check node pointer          if (worker == NULL) { @@ -400,7 +400,7 @@ protected:      void clear() override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          EX_LOG(0, "clear()");          // Iterate through the vertices and release their node storage @@ -553,8 +553,8 @@ private:      vertex_map_t _worker_map; // A map from vertex name to vertex descriptor for workers      vertex_map_t          _datanode_map; // A map from vertex name to vertex descriptor for data nodes -    boost::mutex _mutex; -    boost::recursive_mutex _resolve_mutex; +    std::mutex _mutex; +    std::recursive_mutex _resolve_mutex;  };  expert_container::sptr expert_container::make(const std::string& name) diff --git a/host/lib/include/uhdlib/experts/expert_container.hpp b/host/lib/include/uhdlib/experts/expert_container.hpp index bb05ae334..c794e9d8c 100644 --- a/host/lib/include/uhdlib/experts/expert_container.hpp +++ b/host/lib/include/uhdlib/experts/expert_container.hpp @@ -10,8 +10,8 @@  #include <uhd/config.hpp>  #include <uhd/utils/noncopyable.hpp>  #include <uhdlib/experts/expert_nodes.hpp> -#include <boost/thread/recursive_mutex.hpp>  #include <memory> +#include <mutex>  namespace uhd { namespace experts { @@ -153,7 +153,7 @@ private:       * container.       *       */ -    virtual boost::recursive_mutex& resolve_mutex() = 0; +    virtual std::recursive_mutex& resolve_mutex() = 0;      /*!       * Add a data node to the expert graph diff --git a/host/lib/include/uhdlib/experts/expert_nodes.hpp b/host/lib/include/uhdlib/experts/expert_nodes.hpp index ce061ca26..66dd0f246 100644 --- a/host/lib/include/uhdlib/experts/expert_nodes.hpp +++ b/host/lib/include/uhdlib/experts/expert_nodes.hpp @@ -14,11 +14,12 @@  #include <uhd/utils/noncopyable.hpp>  #include <stdint.h>  #include <boost/core/demangle.hpp> -#include <boost/thread.hpp> -#include <boost/thread/recursive_mutex.hpp>  #include <functional>  #include <list>  #include <memory> +#include <mutex> +#include <sstream> +#include <thread>  namespace uhd { namespace experts { @@ -130,7 +131,7 @@ public:      // from the outside world (of experts) using read and write callbacks. We      // assume that if a callback mutex is passed into the data node that it will      // be accessed from the outside and tag the data node as a PROPERTY. -    data_node_t(const std::string& name, boost::recursive_mutex* mutex = NULL) +    data_node_t(const std::string& name, std::recursive_mutex* mutex = NULL)          : dag_vertex_t(mutex ? CLASS_PROPERTY : CLASS_DATA, name)          , _callback_mutex(mutex)          , _data() @@ -138,9 +139,8 @@ public:      {      } -    data_node_t(const std::string& name, -        const data_t& value, -        boost::recursive_mutex* mutex = NULL) +    data_node_t( +        const std::string& name, const data_t& value, std::recursive_mutex* mutex = NULL)          : dag_vertex_t(mutex ? CLASS_PROPERTY : CLASS_DATA, name)          , _callback_mutex(mutex)          , _data(value) @@ -199,7 +199,7 @@ public:          if (_callback_mutex == NULL)              throw uhd::assertion_error(                  "node " + get_name() + " is missing the callback mutex"); -        boost::lock_guard<boost::recursive_mutex> lock(*_callback_mutex); +        std::lock_guard<std::recursive_mutex> lock(*_callback_mutex);          set(value);          _author = AUTHOR_USER;          if (is_dirty() and has_write_callback()) { @@ -213,7 +213,7 @@ public:          if (_callback_mutex == NULL)              throw uhd::assertion_error(                  "node " + get_name() + " is missing the callback mutex"); -        boost::lock_guard<boost::recursive_mutex> lock(*_callback_mutex); +        std::lock_guard<std::recursive_mutex> lock(*_callback_mutex);          if (has_read_callback()) {              _rd_callback(std::string(get_name()));          } @@ -252,7 +252,7 @@ private:          _rd_callback = nullptr;      } -    boost::recursive_mutex* _callback_mutex; +    std::recursive_mutex* _callback_mutex;      callback_func_t _rd_callback;      callback_func_t _wr_callback;      dirty_tracked<data_t> _data; diff --git a/host/lib/include/uhdlib/usrp/common/recv_packet_demuxer_3000.hpp b/host/lib/include/uhdlib/usrp/common/recv_packet_demuxer_3000.hpp index 0e1041642..7fa24f046 100644 --- a/host/lib/include/uhdlib/usrp/common/recv_packet_demuxer_3000.hpp +++ b/host/lib/include/uhdlib/usrp/common/recv_packet_demuxer_3000.hpp @@ -13,10 +13,10 @@  #include <uhd/utils/byteswap.hpp>  #include <uhd/utils/log.hpp>  #include <stdint.h> -#include <boost/thread.hpp>  #include <chrono>  #include <map>  #include <memory> +#include <mutex>  #include <queue>  namespace uhd { namespace usrp { @@ -62,7 +62,7 @@ struct recv_packet_demuxer_3000 : std::enable_shared_from_this<recv_packet_demux          //-- Check the queue to see if we already have a buffer          //----------------------------------------------------------          { -            boost::mutex::scoped_lock l(mutex); +            std::lock_guard<std::mutex> l(mutex);              queue_type_t& queue = _queues[sid];              if (not queue.empty()) {                  buff = queue.front(); @@ -76,7 +76,7 @@ struct recv_packet_demuxer_3000 : std::enable_shared_from_this<recv_packet_demux              if (buff) {                  const uint32_t new_sid = uhd::wtohx(buff->cast<const uint32_t*>()[1]);                  if (new_sid != sid) { -                    boost::mutex::scoped_lock l(mutex); +                    std::lock_guard<std::mutex> l(mutex);                      if (_queues.count(new_sid) == 0)                          UHD_LOGGER_ERROR("STREAMER")                              << "recv packet demuxer unexpected sid 0x" << std::hex @@ -92,7 +92,7 @@ struct recv_packet_demuxer_3000 : std::enable_shared_from_this<recv_packet_demux      void realloc_sid(const uint32_t sid)      { -        boost::mutex::scoped_lock l(mutex); +        std::lock_guard<std::mutex> l(mutex);          while (not _queues[sid].empty()) // allocated and clears if already allocated          {              _queues[sid].pop(); @@ -104,7 +104,7 @@ struct recv_packet_demuxer_3000 : std::enable_shared_from_this<recv_packet_demux      typedef std::queue<transport::managed_recv_buffer::sptr> queue_type_t;      std::map<uint32_t, queue_type_t> _queues;      transport::zero_copy_if::sptr _xport; -    boost::mutex mutex; +    std::mutex mutex;  };  struct recv_packet_demuxer_proxy_3000 : transport::zero_copy_if diff --git a/host/lib/property_tree.cpp b/host/lib/property_tree.cpp index 53268efd3..14d3ae8c4 100644 --- a/host/lib/property_tree.cpp +++ b/host/lib/property_tree.cpp @@ -8,9 +8,8 @@  #include <uhd/property_tree.hpp>  #include <uhd/types/dict.hpp> -#include <boost/thread/mutex.hpp> -#include <iostream>  #include <memory> +#include <mutex>  using namespace uhd; @@ -79,7 +78,7 @@ public:      sptr subtree(const fs_path& path_) const override      {          const fs_path path = _root / path_; -        boost::mutex::scoped_lock lock(_guts->mutex); +        std::lock_guard<std::mutex> lock(_guts->mutex);          property_tree_impl* subtree = new property_tree_impl(path);          subtree->_guts              = this->_guts; // copy the guts sptr @@ -89,7 +88,7 @@ public:      void remove(const fs_path& path_) override      {          const fs_path path = _root / path_; -        boost::mutex::scoped_lock lock(_guts->mutex); +        std::lock_guard<std::mutex> lock(_guts->mutex);          node_type* parent = NULL;          node_type* node   = &_guts->root; @@ -107,7 +106,7 @@ public:      bool exists(const fs_path& path_) const override      {          const fs_path path = _root / path_; -        boost::mutex::scoped_lock lock(_guts->mutex); +        std::lock_guard<std::mutex> lock(_guts->mutex);          node_type* node = &_guts->root;          for (const std::string& name : path_tokenizer(path)) { @@ -121,7 +120,7 @@ public:      std::vector<std::string> list(const fs_path& path_) const override      {          const fs_path path = _root / path_; -        boost::mutex::scoped_lock lock(_guts->mutex); +        std::lock_guard<std::mutex> lock(_guts->mutex);          node_type* node = &_guts->root;          for (const std::string& name : path_tokenizer(path)) { @@ -136,7 +135,7 @@ public:      std::shared_ptr<void> _pop(const fs_path& path_) override      {          const fs_path path = _root / path_; -        boost::mutex::scoped_lock lock(_guts->mutex); +        std::lock_guard<std::mutex> lock(_guts->mutex);          node_type* parent = NULL;          node_type* node   = &_guts->root; @@ -159,7 +158,7 @@ public:      void _create(const fs_path& path_, const std::shared_ptr<void>& prop) override      {          const fs_path path = _root / path_; -        boost::mutex::scoped_lock lock(_guts->mutex); +        std::lock_guard<std::mutex> lock(_guts->mutex);          node_type* node = &_guts->root;          for (const std::string& name : path_tokenizer(path)) { @@ -176,7 +175,7 @@ public:      std::shared_ptr<void>& _access(const fs_path& path_) const override      {          const fs_path path = _root / path_; -        boost::mutex::scoped_lock lock(_guts->mutex); +        std::lock_guard<std::mutex> lock(_guts->mutex);          node_type* node = &_guts->root;          for (const std::string& name : path_tokenizer(path)) { @@ -205,7 +204,7 @@ private:      struct tree_guts_type      {          node_type root; -        boost::mutex mutex; +        std::mutex mutex;      };      // members, the tree and root prefix diff --git a/host/lib/transport/libusb1_base.cpp b/host/lib/transport/libusb1_base.cpp index df6ed45eb..6808a3e0d 100644 --- a/host/lib/transport/libusb1_base.cpp +++ b/host/lib/transport/libusb1_base.cpp @@ -11,7 +11,6 @@  #include <uhd/types/serial.hpp>  #include <uhd/utils/log.hpp>  #include <uhd/utils/tasks.hpp> -#include <boost/thread/mutex.hpp>  #include <cstdlib>  #include <functional>  #include <iostream> @@ -353,8 +352,8 @@ libusb::device_handle::sptr libusb::device_handle::get_cached_handle(device::spt      static uhd::dict<libusb_device*, std::weak_ptr<device_handle>> handles;      // lock for atomic access to static table above -    static boost::mutex mutex; -    boost::mutex::scoped_lock lock(mutex); +    static std::mutex mutex; +    std::lock_guard<std::mutex> lock(mutex);      // not expired -> get existing handle      if (handles.has_key(dev->get()) and not handles[dev->get()].expired()) { diff --git a/host/lib/transport/libusb1_control.cpp b/host/lib/transport/libusb1_control.cpp index e6339e17f..5d49e3931 100644 --- a/host/lib/transport/libusb1_control.cpp +++ b/host/lib/transport/libusb1_control.cpp @@ -7,7 +7,7 @@  #include "libusb1_base.hpp"  #include <uhd/transport/usb_control.hpp> -#include <boost/thread/mutex.hpp> +#include <mutex>  using namespace uhd::transport; @@ -38,7 +38,7 @@ public:          uint16_t length,          uint32_t libusb_timeout = 0) override      { -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          return libusb_control_transfer(_handle->get(),              request_type,              request, @@ -51,7 +51,7 @@ public:  private:      libusb::device_handle::sptr _handle; -    boost::mutex _mutex; +    std::mutex _mutex;  };  libusb_control_impl::~libusb_control_impl(void) diff --git a/host/lib/transport/libusb1_zero_copy.cpp b/host/lib/transport/libusb1_zero_copy.cpp index fc36b36b7..fe33d2068 100644 --- a/host/lib/transport/libusb1_zero_copy.cpp +++ b/host/lib/transport/libusb1_zero_copy.cpp @@ -14,11 +14,11 @@  #include <uhd/utils/log.hpp>  #include <boost/circular_buffer.hpp>  #include <boost/format.hpp> -#include <boost/thread/condition_variable.hpp> -#include <boost/thread/mutex.hpp> +#include <boost/thread/condition.hpp>  #include <functional>  #include <list>  #include <memory> +#include <mutex>  using namespace uhd;  using namespace uhd::transport; @@ -49,8 +49,8 @@ struct lut_result_t      int completed;      libusb_transfer_status status;      int actual_length; -    boost::mutex mut; -    boost::condition_variable usb_transfer_complete; +    std::mutex mut; +    boost::condition usb_transfer_complete;  #ifdef UHD_TXRX_DEBUG_PRINTS      // These are fore debugging @@ -89,7 +89,7 @@ static void libusb1_zerocopy_dbg_print_err(std::string msg)  static void LIBUSB_CALL libusb_async_cb(libusb_transfer* lut)  {      lut_result_t* r = (lut_result_t*)lut->user_data; -    boost::lock_guard<boost::mutex> lock(r->mut); +    std::lock_guard<std::mutex> lock(r->mut);      r->status        = lut->status;      r->actual_length = lut->actual_length;      r->completed     = 1; @@ -179,7 +179,7 @@ public:       */      UHD_INLINE bool wait_for_completion(const double timeout)      { -        boost::unique_lock<boost::mutex> lock(result.mut); +        std::unique_lock<std::mutex> lock(result.mut);          if (!result.completed) {              if (timeout < 0.0) {                  result.usb_transfer_complete.wait(lock); @@ -313,9 +313,9 @@ public:              return buff;          // Serialize access to buffers -        boost::mutex::scoped_lock get_buff_lock(_get_buff_mutex); +        std::lock_guard<std::mutex> get_buff_lock(_get_buff_mutex); -        boost::mutex::scoped_lock queue_lock(_queue_mutex); +        std::unique_lock<std::mutex> queue_lock(_queue_mutex);          if (_enqueued.empty()) {              _buff_ready_cond.timed_wait(                  queue_lock, boost::posix_time::microseconds(long(timeout * 1e6))); @@ -351,9 +351,9 @@ private:      buffer_pool::sptr _buffer_pool;      std::vector<std::shared_ptr<libusb_zero_copy_mb>> _mb_pool; -    boost::mutex _queue_mutex; -    boost::condition_variable _buff_ready_cond; -    boost::mutex _get_buff_mutex; +    std::mutex _queue_mutex; +    boost::condition _buff_ready_cond; +    std::mutex _get_buff_mutex;      //! why 2 queues? there is room in the future to have > N buffers but only N in flight      boost::circular_buffer<libusb_zero_copy_mb*> _enqueued, _released; @@ -362,7 +362,7 @@ private:      void enqueue_buffer(libusb_zero_copy_mb* mb)      { -        boost::mutex::scoped_lock l(_queue_mutex); +        std::lock_guard<std::mutex> l(_queue_mutex);          _released.push_back(mb);          this->submit_what_we_can();          _buff_ready_cond.notify_one(); @@ -416,13 +416,13 @@ struct libusb_zero_copy_impl : usb_zero_copy      managed_recv_buffer::sptr get_recv_buff(double timeout) override      { -        boost::mutex::scoped_lock l(_recv_mutex); +        std::lock_guard<std::mutex> l(_recv_mutex);          return _recv_impl->get_buff<managed_recv_buffer>(timeout);      }      managed_send_buffer::sptr get_send_buff(double timeout) override      { -        boost::mutex::scoped_lock l(_send_mutex); +        std::lock_guard<std::mutex> l(_send_mutex);          return _send_impl->get_buff<managed_send_buffer>(timeout);      } @@ -445,7 +445,7 @@ struct libusb_zero_copy_impl : usb_zero_copy      }      std::shared_ptr<libusb_zero_copy_single> _recv_impl, _send_impl; -    boost::mutex _recv_mutex, _send_mutex; +    std::mutex _recv_mutex, _send_mutex;  };  libusb_zero_copy_impl::~libusb_zero_copy_impl(void) diff --git a/host/lib/transport/muxed_zero_copy_if.cpp b/host/lib/transport/muxed_zero_copy_if.cpp index f7cc88c9c..34407a9ff 100644 --- a/host/lib/transport/muxed_zero_copy_if.cpp +++ b/host/lib/transport/muxed_zero_copy_if.cpp @@ -10,10 +10,10 @@  #include <uhd/transport/muxed_zero_copy_if.hpp>  #include <uhd/utils/safe_call.hpp>  #include <boost/thread.hpp> -#include <boost/thread/locks.hpp>  #include <functional>  #include <map>  #include <memory> +#include <mutex>  using namespace uhd;  using namespace uhd::transport; @@ -60,7 +60,7 @@ public:      zero_copy_if::sptr make_stream(const uint32_t stream_num) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          if (_streams.size() >= _max_num_streams) {              throw uhd::runtime_error("muxed_zero_copy_if: stream capacity exceeded. "                                       "cannot create more streams."); @@ -82,7 +82,7 @@ public:      void remove_stream(const uint32_t stream_num) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          _streams.erase(stream_num);      } @@ -256,7 +256,7 @@ private:                  {                      // Hold the stream mutex long enough to pull a bounded buffer                      // and lock it (increment its ref count). -                    boost::lock_guard<boost::mutex> lock(_mutex); +                    std::lock_guard<std::mutex> lock(_mutex);                      stream_map_t::iterator str_iter = _streams.find(stream_num);                      if (str_iter != _streams.end()) {                          stream = (*str_iter).second.lock(); @@ -270,7 +270,7 @@ private:              if (stream.get()) {                  stream->push_recv_buff(buff);              } else { -                boost::lock_guard<boost::mutex> lock(_mutex); +                std::lock_guard<std::mutex> lock(_mutex);                  _num_dropped_frames++;              }              // We processed a packet, and there could be more coming @@ -291,7 +291,7 @@ private:      const size_t _max_num_streams;      size_t _num_dropped_frames;      boost::thread _recv_thread; -    boost::mutex _mutex; +    std::mutex _mutex;  };  muxed_zero_copy_if::sptr muxed_zero_copy_if::make(zero_copy_if::sptr base_xport, diff --git a/host/lib/transport/nirio/niusrprio_session.cpp b/host/lib/transport/nirio/niusrprio_session.cpp index b2ea659df..00838075f 100644 --- a/host/lib/transport/nirio/niusrprio_session.cpp +++ b/host/lib/transport/nirio/niusrprio_session.cpp @@ -51,7 +51,7 @@ nirio_status niusrprio_session::enumerate(  nirio_status niusrprio_session::open(nifpga_lvbitx::sptr lvbitx, bool force_download)  { -    boost::unique_lock<boost::recursive_mutex> lock(_session_mutex); +    std::unique_lock<std::recursive_mutex> lock(_session_mutex);      _lvbitx = lvbitx; @@ -101,7 +101,7 @@ nirio_status niusrprio_session::open(nifpga_lvbitx::sptr lvbitx, bool force_down  void niusrprio_session::close(bool skip_reset)  { -    boost::unique_lock<boost::recursive_mutex> lock(_session_mutex); +    std::unique_lock<std::recursive_mutex> lock(_session_mutex);      if (_session_open) {          nirio_status status = NiRio_Status_Success; @@ -114,14 +114,14 @@ void niusrprio_session::close(bool skip_reset)  nirio_status niusrprio_session::reset()  { -    boost::unique_lock<boost::recursive_mutex> lock(_session_mutex); +    std::unique_lock<std::recursive_mutex> lock(_session_mutex);      return _rpc_client.niusrprio_reset_device(_resource_name);  }  nirio_status niusrprio_session::download_bitstream_to_flash(      const std::string& bitstream_path)  { -    boost::unique_lock<boost::recursive_mutex> lock(_session_mutex); +    std::unique_lock<std::recursive_mutex> lock(_session_mutex);      return _rpc_client.niusrprio_download_fpga_to_flash(_resource_name, bitstream_path);  } diff --git a/host/lib/transport/nirio/rpc/rpc_client.cpp b/host/lib/transport/nirio/rpc/rpc_client.cpp index 661f72e81..7b5970610 100644 --- a/host/lib/transport/nirio/rpc/rpc_client.cpp +++ b/host/lib/transport/nirio/rpc/rpc_client.cpp @@ -109,7 +109,7 @@ const boost::system::error_code& rpc_client::call(func_id_t func_id,      func_args_reader_t& out_args,      boost::posix_time::milliseconds timeout)  { -    boost::mutex::scoped_lock lock(_mutex); +    std::unique_lock<std::mutex> lock(_mutex);      if (_io_service_thread.get()) {          _request.header.func_id = func_id; @@ -168,7 +168,7 @@ const boost::system::error_code& rpc_client::call(func_id_t func_id,  void rpc_client::_handle_response_hdr(      const boost::system::error_code& err, size_t transferred, size_t expected)  { -    boost::mutex::scoped_lock lock(_mutex); +    std::lock_guard<std::mutex> lock(_mutex);      _exec_err = err;      if (!_exec_err && (transferred == expected)) {          // Response header received. Verify that it is expected @@ -205,7 +205,7 @@ void rpc_client::_handle_response_hdr(  void rpc_client::_handle_response_data(      const boost::system::error_code& err, size_t transferred, size_t expected)  { -    boost::mutex::scoped_lock lock(_mutex); +    std::lock_guard<std::mutex> lock(_mutex);      _exec_err = err;      if (transferred != expected) {          _exec_err.assign(boost::asio::error::operation_aborted, diff --git a/host/lib/transport/nirio_link.cpp b/host/lib/transport/nirio_link.cpp index 28883ead0..b354aa377 100644 --- a/host/lib/transport/nirio_link.cpp +++ b/host/lib/transport/nirio_link.cpp @@ -9,6 +9,7 @@  #include <uhdlib/transport/adapter.hpp>  #include <uhdlib/transport/links.hpp>  #include <uhdlib/transport/nirio_link.hpp> +#include <boost/format.hpp>  #include <chrono>  // X300 regs diff --git a/host/lib/usrp/b100/usb_zero_copy_wrapper.cpp b/host/lib/usrp/b100/usb_zero_copy_wrapper.cpp index b2348c3a9..7596b47be 100644 --- a/host/lib/usrp/b100/usb_zero_copy_wrapper.cpp +++ b/host/lib/usrp/b100/usb_zero_copy_wrapper.cpp @@ -11,11 +11,10 @@  #include <uhd/utils/log.hpp>  #include <uhd/utils/tasks.hpp>  #include <uhdlib/utils/atomic.hpp> -#include <boost/thread/condition_variable.hpp> -#include <boost/thread/mutex.hpp> +#include <boost/thread/condition.hpp>  #include <functional> -#include <iostream>  #include <memory> +#include <mutex>  #include <vector>  using namespace uhd; @@ -98,7 +97,7 @@ public:      void release(void) override      { -        boost::mutex::scoped_lock lock(_mutex); +        std::unique_lock<std::mutex> lock(_mutex);          _ok_to_auto_flush = true;          // get a reference to the VITA header before incrementing @@ -124,7 +123,7 @@ public:      UHD_INLINE sptr get_new(const double timeout)      { -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          _ok_to_auto_flush = false;          if (not _last_send_buff) { @@ -146,8 +145,8 @@ private:      char* _mem_buffer_tip;      // private variables for auto flusher -    boost::mutex _mutex; -    boost::condition_variable _cond; +    std::mutex _mutex; +    boost::condition _cond;      uhd::task::sptr _task;      bool _ok_to_auto_flush; @@ -157,7 +156,7 @@ private:       */      void auto_flush(void)      { -        boost::mutex::scoped_lock lock(_mutex); +        std::unique_lock<std::mutex> lock(_mutex);          const bool timeout = not _cond.timed_wait(lock, AUTOFLUSH_TIMEOUT);          if (timeout and _ok_to_auto_flush and _last_send_buff and _bytes_in_buffer != 0) {              _last_send_buff->commit(_bytes_in_buffer); diff --git a/host/lib/usrp/b200/b200_radio_ctrl_core.cpp b/host/lib/usrp/b200/b200_radio_ctrl_core.cpp index e885bf1b6..7a730b1fa 100644 --- a/host/lib/usrp/b200/b200_radio_ctrl_core.cpp +++ b/host/lib/usrp/b200/b200_radio_ctrl_core.cpp @@ -14,9 +14,8 @@  #include <uhd/utils/safe_call.hpp>  #include <uhdlib/usrp/common/async_packet_handler.hpp>  #include <boost/format.hpp> -#include <boost/thread/mutex.hpp> -#include <boost/thread/thread.hpp>  #include <functional> +#include <mutex>  #include <queue>  using namespace uhd; @@ -74,14 +73,14 @@ public:       ******************************************************************/      void poke32(const wb_addr_type addr, const uint32_t data) override      { -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          this->send_pkt(addr / 4, data);          this->wait_for_ack(false);      }      uint32_t peek32(const wb_addr_type addr) override      { -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          this->send_pkt(SR_READBACK, addr / 8);          const uint64_t res = this->wait_for_ack(true);          const uint32_t lo  = uint32_t(res & 0xffffffff); @@ -91,7 +90,7 @@ public:      uint64_t peek64(const wb_addr_type addr) override      { -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          this->send_pkt(SR_READBACK, addr / 8);          return this->wait_for_ack(true);      } @@ -101,7 +100,7 @@ public:       ******************************************************************/      void set_time(const uhd::time_spec_t& time) override      { -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          _time     = time;          _use_time = _time != uhd::time_spec_t(0.0);          if (_use_time) @@ -110,13 +109,13 @@ public:      uhd::time_spec_t get_time(void) override      { -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          return _time;      }      void set_tick_rate(const double rate) override      { -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          _tick_rate = rate;      } @@ -327,7 +326,7 @@ private:      uhd::msg_task::sptr _async_task;      const uint32_t _sid;      const std::string _name; -    boost::mutex _mutex; +    std::mutex _mutex;      size_t _seq_out;      uhd::time_spec_t _time;      bool _use_time; diff --git a/host/lib/usrp/common/recv_packet_demuxer.cpp b/host/lib/usrp/common/recv_packet_demuxer.cpp index 9d3067286..9270a40bf 100644 --- a/host/lib/usrp/common/recv_packet_demuxer.cpp +++ b/host/lib/usrp/common/recv_packet_demuxer.cpp @@ -10,8 +10,8 @@  #include <uhd/utils/byteswap.hpp>  #include <uhd/utils/log.hpp>  #include <uhdlib/usrp/common/recv_packet_demuxer.hpp> -#include <boost/thread/mutex.hpp>  #include <deque> +#include <mutex>  #include <queue>  #include <vector> @@ -59,7 +59,7 @@ public:      managed_recv_buffer::sptr get_recv_buff(          const size_t index, const double timeout) override      { -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          managed_recv_buffer::sptr buff;          // there is already an entry in the queue, so pop that @@ -104,7 +104,7 @@ public:  private:      transport::zero_copy_if::sptr _transport;      const uint32_t _sid_base; -    boost::mutex _mutex; +    std::mutex _mutex;      struct channel_guts_type      {          channel_guts_type(void) : wrapper(container) {} diff --git a/host/lib/usrp/cores/i2c_core_200.cpp b/host/lib/usrp/cores/i2c_core_200.cpp index 93e3fedf8..fd9332638 100644 --- a/host/lib/usrp/cores/i2c_core_200.cpp +++ b/host/lib/usrp/cores/i2c_core_200.cpp @@ -8,8 +8,8 @@  #include <uhd/exception.hpp>  #include <uhd/utils/log.hpp>  #include <uhdlib/usrp/cores/i2c_core_200.hpp> -#include <boost/thread/mutex.hpp>  #include <chrono> +#include <mutex>  #include <thread>  #define REG_I2C_WR_PRESCALER_LO (1 << 3) | 0 @@ -137,13 +137,13 @@ private:      void poke(const size_t what, const uint8_t cmd)      { -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          _iface->poke32(_base, (what << 8) | cmd);      }      uint8_t peek(const size_t what)      { -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          _iface->poke32(_base, what << 8);          return uint8_t(_iface->peek32(_readback));      } @@ -151,7 +151,7 @@ private:      wb_iface::sptr _iface;      const size_t _base;      const size_t _readback; -    boost::mutex _mutex; +    std::mutex _mutex;  };  i2c_core_200::sptr i2c_core_200::make( diff --git a/host/lib/usrp/cores/user_settings_core_3000.cpp b/host/lib/usrp/cores/user_settings_core_3000.cpp index 9e04175c2..7293f9070 100644 --- a/host/lib/usrp/cores/user_settings_core_3000.cpp +++ b/host/lib/usrp/cores/user_settings_core_3000.cpp @@ -7,7 +7,7 @@  #include <uhd/exception.hpp>  #include <uhdlib/usrp/cores/user_settings_core_3000.hpp> -#include <boost/thread/thread.hpp> +#include <mutex>  using namespace uhd; @@ -38,7 +38,7 @@ public:          if (offset % sizeof(uint64_t) != 0)              throw uhd::value_error("peek64: Incorrect address alignment"); -        boost::unique_lock<boost::mutex> lock(_mutex); +        std::unique_lock<std::mutex> lock(_mutex);          _iface->poke32(              REG_USER_RB_ADDR, offset >> 3); // Translate byte offset to 64-bit offset          return _iface->peek64(_rb_reg_addr); @@ -49,7 +49,7 @@ public:          if (offset % sizeof(uint32_t) != 0)              throw uhd::value_error("poke32: Incorrect address alignment"); -        boost::unique_lock<boost::mutex> lock(_mutex); +        std::unique_lock<std::mutex> lock(_mutex);          _iface->poke32(              REG_USER_SR_ADDR, offset >> 2); // Translate byte offset to 64-bit offset          _iface->poke32(REG_USER_SR_DATA, value); @@ -72,7 +72,7 @@ private:      wb_iface::sptr _iface;      const wb_addr_type _sr_base_addr;      const wb_addr_type _rb_reg_addr; -    boost::mutex _mutex; +    std::mutex _mutex;  };  wb_iface::sptr user_settings_core_3000::make( diff --git a/host/lib/usrp/dboard/db_ubx.cpp b/host/lib/usrp/dboard/db_ubx.cpp index d36347b86..56d73bdab 100644 --- a/host/lib/usrp/dboard/db_ubx.cpp +++ b/host/lib/usrp/dboard/db_ubx.cpp @@ -21,12 +21,12 @@  #include <uhd/utils/static.hpp>  #include <uhdlib/usrp/common/max287x.hpp>  #include <boost/algorithm/string.hpp> -#include <boost/math/special_functions/round.hpp> -#include <boost/thread/mutex.hpp> +#include <boost/format.hpp>  #include <chrono>  #include <functional>  #include <map>  #include <memory> +#include <mutex>  #include <thread>  using namespace uhd; @@ -595,14 +595,14 @@ private:       **********************************************************************/      void write_spi_reg(spi_dest_t dest, uint32_t value)      { -        boost::mutex::scoped_lock lock(_spi_mutex); +        std::lock_guard<std::mutex> lock(_spi_mutex);          ROUTE_SPI(_iface, dest);          WRITE_SPI(_iface, value);      }      void write_spi_regs(spi_dest_t dest, std::vector<uint32_t> values)      { -        boost::mutex::scoped_lock lock(_spi_mutex); +        std::lock_guard<std::mutex> lock(_spi_mutex);          ROUTE_SPI(_iface, dest);          for (uint32_t value : values)              WRITE_SPI(_iface, value); @@ -759,7 +759,7 @@ private:       **********************************************************************/      sensor_value_t get_locked(const std::string& pll_name)      { -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          assert_has(ubx_plls, pll_name, "ubx pll name");          if (pll_name == "TXLO") { @@ -785,7 +785,7 @@ private:      // Set RX antennas      std::string set_rx_ant(const std::string& ant)      { -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          // validate input          assert_has(ubx_rx_antennas, ant, "ubx rx antenna name"); @@ -819,7 +819,7 @@ private:       **********************************************************************/      double set_tx_gain(double gain)      { -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          gain              = ubx_tx_gain_range.clip(gain);          int attn_code     = int(std::floor(gain * 2));          _ubx_tx_atten_val = ((attn_code & 0x3F) << 10); @@ -834,7 +834,7 @@ private:      double set_rx_gain(double gain)      { -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          gain              = ubx_rx_gain_range.clip(gain);          int attn_code     = int(std::floor(gain * 2));          _ubx_rx_atten_val = ((attn_code & 0x3F) << 10); @@ -852,7 +852,7 @@ private:       **********************************************************************/      double set_tx_freq(double freq)      { -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          double freq_lo1 = 0.0;          double freq_lo2 = 0.0;          double ref_freq = _iface->get_clock_rate(dboard_iface::UNIT_TX); @@ -1000,7 +1000,7 @@ private:      double set_rx_freq(double freq)      { -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          double freq_lo1 = 0.0;          double freq_lo2 = 0.0;          double ref_freq = _iface->get_clock_rate(dboard_iface::UNIT_RX); @@ -1186,7 +1186,7 @@ private:       **********************************************************************/      void set_power_mode(std::string mode)      { -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          if (mode == "performance") {              // performance mode attempts to reduce tuning and settling time              // as much as possible without adding noise. @@ -1292,7 +1292,7 @@ private:              }          }(); -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          for (const auto& lo : {_txlo1, _txlo2, _rxlo1, _rxlo2}) {              lo->set_auto_retune(enabled);          } @@ -1302,8 +1302,8 @@ private:       * Variables       **********************************************************************/      dboard_iface::sptr _iface; -    boost::mutex _spi_mutex; -    boost::mutex _mutex; +    std::mutex _spi_mutex; +    std::mutex _mutex;      ubx_cpld_reg_t _cpld_reg;      uint32_t _prev_cpld_value;      std::map<ubx_gpio_field_id_t, ubx_gpio_field_info_t> _gpio_map; diff --git a/host/lib/usrp/dboard/twinrx/twinrx_ctrl.cpp b/host/lib/usrp/dboard/twinrx/twinrx_ctrl.cpp index 29ab194be..355d980ee 100644 --- a/host/lib/usrp/dboard/twinrx/twinrx_ctrl.cpp +++ b/host/lib/usrp/dboard/twinrx/twinrx_ctrl.cpp @@ -12,6 +12,8 @@  #include <uhdlib/usrp/common/adf435x.hpp>  #include <uhdlib/usrp/common/adf535x.hpp>  #include <uhdlib/utils/narrow.hpp> +#include <boost/chrono.hpp> +#include <boost/format.hpp>  #include <chrono>  #include <cmath>  #include <thread> @@ -158,19 +160,19 @@ public:      ~twinrx_ctrl_impl() override      { -        UHD_SAFE_CALL(boost::lock_guard<boost::mutex> lock(_mutex); +        UHD_SAFE_CALL(std::lock_guard<std::mutex> lock(_mutex);                        _gpio_iface->set_field(twinrx_gpio::FIELD_SWPS_EN, 0);)      }      void commit() override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          _commit();      }      void set_chan_enabled(channel_t ch, bool enabled, bool commit = true) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          if (ch == CH1 or ch == BOTH) {              _cpld_regs->if0_reg3.set(rm::if0_reg3_t::IF1_IF2_EN_CH1, bool2bin(enabled));              _cpld_regs->if0_reg0.set(rm::if0_reg0_t::AMP_LO2_EN_CH1, bool2bin(enabled)); @@ -191,7 +193,7 @@ public:      void set_preamp1(channel_t ch, preamp_state_t value, bool commit = true) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          if (ch == CH1 or ch == BOTH) {              _cpld_regs->rf0_reg1.set(                  rm::rf0_reg1_t::SWPA1_CTL_CH1, bool2bin(value == PREAMP_HIGHBAND)); @@ -218,7 +220,7 @@ public:      void set_preamp2(channel_t ch, bool enabled, bool commit = true) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          if (ch == CH1 or ch == BOTH) {              _cpld_regs->rf2_reg7.set(                  rm::rf2_reg7_t::SWPA4_CTRL_CH1, bool2bin(not enabled)); @@ -236,7 +238,7 @@ public:      void set_lb_preamp_preselector(          channel_t ch, bool enabled, bool commit = true) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          if (ch == CH1 or ch == BOTH) {              _cpld_regs->rf0_reg7.set(                  rm::rf0_reg7_t::SWPA3_CTRL_CH1, bool2bin(not enabled)); @@ -251,7 +253,7 @@ public:      void set_signal_path(channel_t ch, signal_path_t path, bool commit = true) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          if (ch == CH1 or ch == BOTH) {              _cpld_regs->rf2_reg2.set(                  rm::rf2_reg2_t::SW11_CTRL_CH1, bool2bin(path == PATH_LOWBAND)); @@ -299,7 +301,7 @@ public:      void set_lb_preselector(          channel_t ch, preselector_path_t path, bool commit = true) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          uint32_t sw7val = 0, sw8val = 0;          switch (path) {              case PRESEL_PATH1: @@ -336,7 +338,7 @@ public:      void set_hb_preselector(          channel_t ch, preselector_path_t path, bool commit = true) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          uint32_t sw9ch1val = 0, sw10ch1val = 0, sw9ch2val = 0, sw10ch2val = 0;          switch (path) {              case PRESEL_PATH1: @@ -380,7 +382,7 @@ public:      void set_input_atten(channel_t ch, uint8_t atten, bool commit = true) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          if (ch == CH1 or ch == BOTH) {              _cpld_regs->rf0_reg0.set(rm::rf0_reg0_t::ATTEN_IN_CH1, atten & 0x1F);          } @@ -393,7 +395,7 @@ public:      void set_lb_atten(channel_t ch, uint8_t atten, bool commit = true) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          if (ch == CH1 or ch == BOTH) {              _cpld_regs->rf2_reg0.set(rm::rf2_reg0_t::ATTEN_LB_CH1, atten & 0x1F);          } @@ -406,7 +408,7 @@ public:      void set_hb_atten(channel_t ch, uint8_t atten, bool commit = true) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          if (ch == CH1 or ch == BOTH) {              _cpld_regs->rf1_reg0.set(rm::rf1_reg0_t::ATTEN_HB_CH1, atten & 0x1F);          } @@ -419,7 +421,7 @@ public:      void set_lo1_source(channel_t ch, lo_source_t source, bool commit = true) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          if (ch == CH1 or ch == BOTH) {              _cpld_regs->rf1_reg5.set(                  rm::rf1_reg5_t::SW14_CTRL_CH2, bool2bin(source != LO_COMPANION)); @@ -447,7 +449,7 @@ public:      void set_lo2_source(channel_t ch, lo_source_t source, bool commit = true) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          if (ch == CH1 or ch == BOTH) {              _cpld_regs->if0_reg0.set(                  rm::if0_reg0_t::SW19_CTRL_CH2, bool2bin(source == LO_COMPANION)); @@ -472,7 +474,7 @@ public:      void set_lo1_export_source(lo_export_source_t source, bool commit = true) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          // SW22 may conflict with the cal switch but this attr takes priority and we          // assume that the cal switch is disabled (by disabling it!)          _set_cal_mode(CAL_DISABLED, source); @@ -486,7 +488,7 @@ public:      void set_lo2_export_source(lo_export_source_t source, bool commit = true) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          _cpld_regs->if0_reg7.set(              rm::if0_reg7_t::SW24_CTRL_CH2, bool2bin(source == LO_CH2_SYNTH));          _cpld_regs->if0_reg4.set( @@ -501,7 +503,7 @@ public:      void set_antenna_mapping(antenna_mapping_t mapping, bool commit = true) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          enum switch_path_t { CONNECT, TERM, EXPORT, IMPORT, SWAP };          switch_path_t path1, path2; @@ -548,7 +550,7 @@ public:      void set_crossover_cal_mode(cal_mode_t cal_mode, bool commit = true) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          if (_lo1_export == LO_CH1_SYNTH && cal_mode == CAL_CH2) {              throw uhd::runtime_error(                  "cannot enable cal crossover on CH2 when LO1 in CH1 is exported"); @@ -565,7 +567,7 @@ public:      double set_lo1_synth_freq(channel_t ch, double freq, bool commit = true) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          double coerced_freq = 0.0;          if (ch == CH1 or ch == BOTH) { @@ -586,7 +588,7 @@ public:      double set_lo2_synth_freq(channel_t ch, double freq, bool commit = true) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          double coerced_freq = 0.0;          if (ch == CH1 or ch == BOTH) { @@ -605,7 +607,7 @@ public:      double set_lo1_charge_pump(channel_t ch, double current, bool commit = true) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          double coerced_current = 0.0;          if (ch == CH1 or ch == BOTH) {              coerced_current = @@ -624,7 +626,7 @@ public:      double set_lo2_charge_pump(channel_t ch, double current, bool commit = true) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          double coerced_current = 0.0;          if (ch == CH1 or ch == BOTH) {              coerced_current = @@ -655,7 +657,7 @@ public:      bool read_lo1_locked(channel_t ch) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          bool locked = true;          if (ch == CH1 or ch == BOTH) { @@ -671,7 +673,7 @@ public:      bool read_lo2_locked(channel_t ch) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          bool locked = true;          if (ch == CH1 or ch == BOTH) { @@ -851,7 +853,7 @@ private: // Members          }      }; -    boost::mutex _mutex; +    std::mutex _mutex;      dboard_iface::sptr _db_iface;      twinrx_gpio::sptr _gpio_iface;      twinrx_cpld_regmap::sptr _cpld_regs; diff --git a/host/lib/usrp/dboard/twinrx/twinrx_io.hpp b/host/lib/usrp/dboard/twinrx/twinrx_io.hpp index 538b0bfa8..5998a87d1 100644 --- a/host/lib/usrp/dboard/twinrx/twinrx_io.hpp +++ b/host/lib/usrp/dboard/twinrx/twinrx_io.hpp @@ -12,7 +12,7 @@  #include <uhd/usrp/dboard_base.hpp>  #include <uhd/utils/soft_register.hpp>  #include <uhdlib/usrp/cores/gpio_atr_3000.hpp> -#include <boost/thread.hpp> +#include <boost/chrono.hpp>  namespace uhd { namespace usrp { namespace dboard { namespace twinrx { @@ -95,7 +95,7 @@ public:      void set_field(const uhd::soft_reg_field_t field, const uint32_t value)      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          using namespace soft_reg_field;          _db_iface->set_gpio_out( @@ -104,7 +104,7 @@ public:      uint32_t get_field(const uhd::soft_reg_field_t field)      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          using namespace soft_reg_field;          return (_db_iface->read_gpio(dboard_iface::UNIT_BOTH) & mask<uint32_t>(field))                 >> shift(field); @@ -113,7 +113,7 @@ public:      // CPLD register write-only interface      void poke32(const wb_addr_type addr, const uint32_t data) override      { -        boost::lock_guard<boost::mutex> lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          using namespace soft_reg_field;          // Step 1: Write the reg offset and data to the GPIO bus and de-assert all enables @@ -140,7 +140,7 @@ private: // Members/definitions      // Members      dboard_iface::sptr _db_iface; -    boost::mutex _mutex; +    std::mutex _mutex;  };  class twinrx_cpld_regmap : public uhd::soft_regmap_t diff --git a/host/lib/usrp/gps_ctrl.cpp b/host/lib/usrp/gps_ctrl.cpp index bcf938863..cafc2f662 100644 --- a/host/lib/usrp/gps_ctrl.cpp +++ b/host/lib/usrp/gps_ctrl.cpp @@ -12,12 +12,13 @@  #include <stdint.h>  #include <boost/algorithm/string.hpp>  #include <boost/date_time.hpp> +#include <boost/date_time/posix_time/posix_time_types.hpp>  #include <boost/format.hpp> -#include <boost/thread/mutex.hpp> -#include <boost/thread/thread.hpp> +#include <boost/thread/thread_time.hpp>  #include <boost/tokenizer.hpp>  #include <chrono>  #include <ctime> +#include <mutex>  #include <regex>  #include <string>  #include <thread> @@ -49,7 +50,7 @@ class gps_ctrl_impl : public gps_ctrl  {  private:      std::map<std::string, std::tuple<std::string, boost::system_time, bool>> sentences; -    boost::mutex cache_mutex; +    std::mutex cache_mutex;      boost::system_time _last_cache_update;      std::string get_sentence(const std::string which, @@ -63,7 +64,7 @@ private:          boost::posix_time::time_duration age;          if (wait_for_next) { -            boost::lock_guard<boost::mutex> lock(cache_mutex); +            std::lock_guard<std::mutex> lock(cache_mutex);              update_cache();              // mark sentence as touched              if (sentences.find(which) != sentences.end()) @@ -71,7 +72,7 @@ private:          }          while (1) {              try { -                boost::lock_guard<boost::mutex> lock(cache_mutex); +                std::lock_guard<std::mutex> lock(cache_mutex);                  // update cache if older than a millisecond                  if (now - _last_cache_update > milliseconds(1)) { diff --git a/host/lib/usrp/usrp1/soft_time_ctrl.cpp b/host/lib/usrp/usrp1/soft_time_ctrl.cpp index 1c3015480..c23f572d0 100644 --- a/host/lib/usrp/usrp1/soft_time_ctrl.cpp +++ b/host/lib/usrp/usrp1/soft_time_ctrl.cpp @@ -8,8 +8,8 @@  #include "soft_time_ctrl.hpp"  #include <uhd/utils/tasks.hpp>  #include <uhdlib/utils/system_time.hpp> -#include <boost/date_time/posix_time/posix_time.hpp> -#include <boost/thread/condition_variable.hpp> +#include <boost/thread/condition.hpp> +#include <chrono>  #include <functional>  #include <iostream>  #include <memory> @@ -52,13 +52,13 @@ public:       ******************************************************************/      void set_time(const time_spec_t& time) override      { -        boost::mutex::scoped_lock lock(_update_mutex); +        std::lock_guard<std::mutex> lock(_update_mutex);          _time_offset = uhd::get_system_time() - time;      }      time_spec_t get_time(void) override      { -        boost::mutex::scoped_lock lock(_update_mutex); +        std::lock_guard<std::mutex> lock(_update_mutex);          return time_now();      } @@ -69,11 +69,11 @@ public:      }      UHD_INLINE void sleep_until_time( -        boost::mutex::scoped_lock& lock, const time_spec_t& time) +        std::unique_lock<std::mutex>& lock, const time_spec_t& time)      { -        boost::condition_variable cond; +        boost::condition cond;          // use a condition variable to unlock, sleep, lock -        double seconds_to_sleep = (time - time_now()).get_real_secs(); +        const double seconds_to_sleep = (time - time_now()).get_real_secs();          cond.timed_wait(lock, pt::microseconds(long(seconds_to_sleep * 1e6)));      } @@ -82,7 +82,7 @@ public:       ******************************************************************/      size_t recv_post(rx_metadata_t& md, const size_t nsamps) override      { -        boost::mutex::scoped_lock lock(_update_mutex); +        std::lock_guard<std::mutex> lock(_update_mutex);          // Since it timed out on the receive, check for inline messages...          // Must do a post check because recv() will not wake up for a message. @@ -144,7 +144,7 @@ public:          if (not md.has_time_spec)              return; -        boost::mutex::scoped_lock lock(_update_mutex); +        std::unique_lock<std::mutex> lock(_update_mutex);          time_spec_t time_at(md.time_spec - TWIDDLE); @@ -168,7 +168,7 @@ public:       ******************************************************************/      void recv_cmd_handle_cmd(const stream_cmd_t& cmd)      { -        boost::mutex::scoped_lock lock(_update_mutex); +        std::unique_lock<std::mutex> lock(_update_mutex);          // handle the stream at time by sleeping          if (not cmd.stream_now) { @@ -227,7 +227,7 @@ public:      }  private: -    boost::mutex _update_mutex; +    std::mutex _update_mutex;      size_t _nsamps_remaining;      stream_cmd_t::stream_mode_t _stream_mode;      time_spec_t _time_offset; diff --git a/host/lib/usrp/usrp2/io_impl.cpp b/host/lib/usrp/usrp2/io_impl.cpp index 792b4721b..a966f91ea 100644 --- a/host/lib/usrp/usrp2/io_impl.cpp +++ b/host/lib/usrp/usrp2/io_impl.cpp @@ -92,7 +92,7 @@ public:       */      UHD_INLINE bool check_fc_condition(double timeout)      { -        boost::mutex::scoped_lock lock(_fc_mutex); +        std::unique_lock<std::mutex> lock(_fc_mutex);          if (this->ready())              return true;          boost::this_thread::disable_interruption di; // disable because the wait can throw @@ -105,7 +105,7 @@ public:       */      UHD_INLINE void update_fc_condition(seq_type seq)      { -        boost::mutex::scoped_lock lock(_fc_mutex); +        std::unique_lock<std::mutex> lock(_fc_mutex);          _last_seq_ack = seq;          lock.unlock();          _fc_cond.notify_one(); @@ -117,7 +117,7 @@ private:          return seq_type(_last_seq_out - _last_seq_ack) < _max_seqs_out;      } -    boost::mutex _fc_mutex; +    std::mutex _fc_mutex;      boost::condition _fc_cond;      seq_type _last_seq_out, _last_seq_ack;      const seq_type _max_seqs_out; diff --git a/host/lib/usrp/usrp2/usrp2_fifo_ctrl.cpp b/host/lib/usrp/usrp2/usrp2_fifo_ctrl.cpp index 116051216..a4f46fca6 100644 --- a/host/lib/usrp/usrp2/usrp2_fifo_ctrl.cpp +++ b/host/lib/usrp/usrp2/usrp2_fifo_ctrl.cpp @@ -12,9 +12,7 @@  #include <uhd/utils/log.hpp>  #include <uhd/utils/safe_call.hpp>  #include <boost/asio.hpp> //htonl -#include <boost/format.hpp> -#include <boost/thread/mutex.hpp> -#include <boost/thread/thread.hpp> +#include <mutex>  using namespace uhd;  using namespace uhd::transport; @@ -58,7 +56,7 @@ public:       ******************************************************************/      void poke32(const wb_addr_type addr, const uint32_t data) override      { -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          this->send_pkt((addr - SETTING_REGS_BASE) / 4, data, POKE32_CMD); @@ -67,7 +65,7 @@ public:      uint32_t peek32(const wb_addr_type addr) override      { -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          this->send_pkt((addr - READBACK_BASE) / 4, 0, PEEK32_CMD); @@ -92,7 +90,7 @@ public:       ******************************************************************/      void init_spi(void)      { -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          this->send_pkt(SPI_DIV, SPI_DIVIDER, POKE32_CMD);          this->wait_for_ack(_seq_out - MAX_SEQS_OUT); @@ -106,7 +104,7 @@ public:          size_t num_bits,          bool readback) override      { -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          // load control word          uint32_t ctrl_word = 0; @@ -145,7 +143,7 @@ public:       ******************************************************************/      void set_time(const uhd::time_spec_t& time) override      { -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          _time     = time;          _use_time = _time != uhd::time_spec_t(0.0);          if (_use_time) @@ -154,13 +152,13 @@ public:      uhd::time_spec_t get_time() override      { -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          return _time;      }      void set_tick_rate(const double rate) override      { -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          _tick_rate = rate;      } @@ -234,7 +232,7 @@ private:      }      zero_copy_if::sptr _xport; -    boost::mutex _mutex; +    std::mutex _mutex;      uint16_t _seq_out;      uint16_t _seq_ack;      uhd::time_spec_t _time; diff --git a/host/lib/usrp/usrp2/usrp2_iface.cpp b/host/lib/usrp/usrp2/usrp2_iface.cpp index 23104d18f..c79ffccab 100644 --- a/host/lib/usrp/usrp2/usrp2_iface.cpp +++ b/host/lib/usrp/usrp2/usrp2_iface.cpp @@ -26,6 +26,7 @@  #include <chrono>  #include <functional>  #include <iostream> +#include <mutex>  #include <thread>  using namespace uhd; @@ -268,7 +269,7 @@ public:          uint32_t lo = USRP2_FW_COMPAT_NUM,          uint32_t hi = USRP2_FW_COMPAT_NUM)      { -        boost::mutex::scoped_lock lock(_ctrl_mutex); +        std::lock_guard<std::mutex> lock(_ctrl_mutex);          for (size_t i = 0; i < CTRL_RECV_RETRIES; i++) {              try { @@ -472,7 +473,7 @@ private:      udp_simple::sptr _ctrl_transport;      // used in send/recv -    boost::mutex _ctrl_mutex; +    std::mutex _ctrl_mutex;      uint32_t _ctrl_seq_num;      uint32_t _protocol_compat; diff --git a/host/lib/usrp/usrp_c.cpp b/host/lib/usrp/usrp_c.cpp index bda9454b6..7b8f3f8a6 100644 --- a/host/lib/usrp/usrp_c.cpp +++ b/host/lib/usrp/usrp_c.cpp @@ -12,8 +12,8 @@  #include <uhd/usrp/usrp.h>  #include <uhd/utils/static.hpp>  #include <string.h> -#include <boost/thread/mutex.hpp>  #include <map> +#include <mutex>  /****************************************************************************   * Helpers @@ -86,17 +86,17 @@ UHD_SINGLETON_FCN(usrp_ptrs, get_usrp_ptrs);  /****************************************************************************   * RX Streamer   ***************************************************************************/ -static boost::mutex _rx_streamer_make_mutex; +static std::mutex _rx_streamer_make_mutex;  uhd_error uhd_rx_streamer_make(uhd_rx_streamer_handle* h)  { -    UHD_SAFE_C(boost::mutex::scoped_lock lock(_rx_streamer_make_mutex); +    UHD_SAFE_C(std::lock_guard<std::mutex> lock(_rx_streamer_make_mutex);                 (*h) = new uhd_rx_streamer;)  } -static boost::mutex _rx_streamer_free_mutex; +static std::mutex _rx_streamer_free_mutex;  uhd_error uhd_rx_streamer_free(uhd_rx_streamer_handle* h)  { -    UHD_SAFE_C(boost::mutex::scoped_lock lock(_rx_streamer_free_mutex); delete (*h); +    UHD_SAFE_C(std::lock_guard<std::mutex> lock(_rx_streamer_free_mutex); delete (*h);                 (*h) = NULL;)  } @@ -142,17 +142,17 @@ uhd_error uhd_rx_streamer_last_error(  /****************************************************************************   * TX Streamer   ***************************************************************************/ -static boost::mutex _tx_streamer_make_mutex; +static std::mutex _tx_streamer_make_mutex;  uhd_error uhd_tx_streamer_make(uhd_tx_streamer_handle* h)  { -    UHD_SAFE_C(boost::mutex::scoped_lock lock(_tx_streamer_make_mutex); +    UHD_SAFE_C(std::lock_guard<std::mutex> lock(_tx_streamer_make_mutex);                 (*h) = new uhd_tx_streamer;)  } -static boost::mutex _tx_streamer_free_mutex; +static std::mutex _tx_streamer_free_mutex;  uhd_error uhd_tx_streamer_free(uhd_tx_streamer_handle* h)  { -    UHD_SAFE_C(boost::mutex::scoped_lock lock(_tx_streamer_free_mutex); delete *h; +    UHD_SAFE_C(std::lock_guard<std::mutex> lock(_tx_streamer_free_mutex); delete *h;                 *h = NULL;)  } @@ -199,11 +199,11 @@ uhd_error uhd_tx_streamer_last_error(  /****************************************************************************   * Generate / Destroy API calls   ***************************************************************************/ -static boost::mutex _usrp_find_mutex; +static std::mutex _usrp_find_mutex;  uhd_error uhd_usrp_find(const char* args, uhd_string_vector_handle* strings_out)  {      UHD_SAFE_C( -        boost::mutex::scoped_lock _lock(_usrp_find_mutex); +        std::lock_guard<std::mutex> _lock(_usrp_find_mutex);          uhd::device_addrs_t devs =              uhd::device::find(std::string(args), uhd::device::USRP); @@ -212,10 +212,10 @@ uhd_error uhd_usrp_find(const char* args, uhd_string_vector_handle* strings_out)               : devs) { (*strings_out)->string_vector_cpp.push_back(dev.to_string()); })  } -static boost::mutex _usrp_make_mutex; +static std::mutex _usrp_make_mutex;  uhd_error uhd_usrp_make(uhd_usrp_handle* h, const char* args)  { -    UHD_SAFE_C(boost::mutex::scoped_lock lock(_usrp_make_mutex); +    UHD_SAFE_C(std::lock_guard<std::mutex> lock(_usrp_make_mutex);                 size_t usrp_count = usrp_ptr::usrp_counter;                 usrp_ptr::usrp_counter++; @@ -233,11 +233,11 @@ uhd_error uhd_usrp_make(uhd_usrp_handle* h, const char* args)                 (*h)->usrp_index = usrp_count;)  } -static boost::mutex _usrp_free_mutex; +static std::mutex _usrp_free_mutex;  uhd_error uhd_usrp_free(uhd_usrp_handle* h)  {      UHD_SAFE_C( -        boost::mutex::scoped_lock lock(_usrp_free_mutex); +        std::lock_guard<std::mutex> lock(_usrp_free_mutex);          if (!get_usrp_ptrs().count((*h)->usrp_index)) { return UHD_ERROR_INVALID_DEVICE; } @@ -253,12 +253,12 @@ uhd_error uhd_usrp_last_error(uhd_usrp_handle h, char* error_out, size_t strbuff                 strncpy(error_out, h->last_error.c_str(), strbuffer_len);)  } -static boost::mutex _usrp_get_rx_stream_mutex; +static std::mutex _usrp_get_rx_stream_mutex;  uhd_error uhd_usrp_get_rx_stream(      uhd_usrp_handle h_u, uhd_stream_args_t* stream_args, uhd_rx_streamer_handle h_s)  {      UHD_SAFE_C_SAVE_ERROR( -        h_s, boost::mutex::scoped_lock lock(_usrp_get_rx_stream_mutex); +        h_s, std::lock_guard<std::mutex> lock(_usrp_get_rx_stream_mutex);          if (!get_usrp_ptrs().count(h_u->usrp_index)) {              h_s->last_error = "Streamer's device is invalid or expired."; @@ -270,12 +270,12 @@ uhd_error uhd_usrp_get_rx_stream(          h_s->usrp_index = h_u->usrp_index;)  } -static boost::mutex _usrp_get_tx_stream_mutex; +static std::mutex _usrp_get_tx_stream_mutex;  uhd_error uhd_usrp_get_tx_stream(      uhd_usrp_handle h_u, uhd_stream_args_t* stream_args, uhd_tx_streamer_handle h_s)  {      UHD_SAFE_C_SAVE_ERROR( -        h_s, boost::mutex::scoped_lock lock(_usrp_get_tx_stream_mutex); +        h_s, std::lock_guard<std::mutex> lock(_usrp_get_tx_stream_mutex);          if (!get_usrp_ptrs().count(h_u->usrp_index)) {              h_s->last_error = "Streamer's device is invalid or expired."; diff --git a/host/lib/usrp/x300/x300_fw_ctrl.cpp b/host/lib/usrp/x300/x300_fw_ctrl.cpp index 9cbad7576..110025228 100644 --- a/host/lib/usrp/x300/x300_fw_ctrl.cpp +++ b/host/lib/usrp/x300/x300_fw_ctrl.cpp @@ -16,8 +16,8 @@  #include <uhd/utils/log.hpp>  #include <boost/date_time/posix_time/posix_time.hpp>  #include <boost/format.hpp> -#include <boost/thread/mutex.hpp>  #include <chrono> +#include <mutex>  #include <thread>  using namespace uhd; @@ -35,14 +35,14 @@ public:      void flush(void)      { -        boost::mutex::scoped_lock lock(reg_access); +        std::lock_guard<std::mutex> lock(reg_access);          __flush();      }      void poke32(const wb_addr_type addr, const uint32_t data) override      {          for (size_t i = 1; i <= num_retries; i++) { -            boost::mutex::scoped_lock lock(reg_access); +            std::lock_guard<std::mutex> lock(reg_access);              try {                  return this->__poke32(addr, data);              } catch (const uhd::io_error& ex) { @@ -60,7 +60,7 @@ public:      uint32_t peek32(const wb_addr_type addr) override      {          for (size_t i = 1; i <= num_retries; i++) { -            boost::mutex::scoped_lock lock(reg_access); +            std::lock_guard<std::mutex> lock(reg_access);              try {                  uint32_t data = this->__peek32(addr);                  return data; @@ -85,7 +85,7 @@ protected:      virtual void __flush()                                              = 0;      virtual std::string __loc_info()                                    = 0; -    boost::mutex reg_access; +    std::mutex reg_access;  }; diff --git a/host/lib/usrp/x300/x300_fw_uart.cpp b/host/lib/usrp/x300/x300_fw_uart.cpp index 1bfc2a2e4..804a1a357 100644 --- a/host/lib/usrp/x300/x300_fw_uart.cpp +++ b/host/lib/usrp/x300/x300_fw_uart.cpp @@ -11,8 +11,8 @@  #include <uhd/types/serial.hpp>  #include <uhd/types/wb_iface.hpp>  #include <uhd/utils/log.hpp> -#include <boost/format.hpp>  #include <chrono> +#include <mutex>  using namespace uhd; @@ -52,7 +52,7 @@ struct x300_uart_iface : uart_iface      void write_uart(const std::string& buff) override      { -        boost::mutex::scoped_lock lock(_write_mutex); +        std::lock_guard<std::mutex> lock(_write_mutex);          for (const char ch : buff) {              this->putchar(ch);          } @@ -120,7 +120,7 @@ struct x300_uart_iface : uart_iface      std::string read_uart(double timeout) override      { -        boost::mutex::scoped_lock lock(_read_mutex); +        std::lock_guard<std::mutex> lock(_read_mutex);          const auto exit_time = std::chrono::steady_clock::now()                                 + std::chrono::microseconds(int64_t(timeout * 1e6)); @@ -156,8 +156,8 @@ struct x300_uart_iface : uart_iface      uint32_t _last_device_rxoffset;      std::vector<uint32_t> _rxcache;      std::string _rxbuff; -    boost::mutex _read_mutex; -    boost::mutex _write_mutex; +    std::mutex _read_mutex; +    std::mutex _write_mutex;  };  uart_iface::sptr x300_make_uart_iface(wb_iface::sptr iface) diff --git a/host/lib/usrp_clock/octoclock/octoclock_impl.hpp b/host/lib/usrp_clock/octoclock/octoclock_impl.hpp index 86fd5342d..f469f2dff 100644 --- a/host/lib/usrp_clock/octoclock/octoclock_impl.hpp +++ b/host/lib/usrp_clock/octoclock/octoclock_impl.hpp @@ -17,8 +17,8 @@  #include <uhd/usrp/gps_ctrl.hpp>  #include <uhd/usrp/mboard_eeprom.hpp>  #include <uhd/usrp_clock/octoclock_eeprom.hpp> -#include <boost/thread.hpp>  #include <memory> +#include <mutex>  uhd::device_addrs_t octoclock_find(const uhd::device_addr_t& hint); @@ -73,7 +73,7 @@ private:      std::string _get_images_help_message(const std::string& addr); -    boost::mutex _device_mutex; +    std::mutex _device_mutex;  };  #endif /* INCLUDED_OCTOCLOCK_IMPL_HPP */ diff --git a/host/lib/usrp_clock/usrp_clock_c.cpp b/host/lib/usrp_clock/usrp_clock_c.cpp index ea67c7e6e..c0408bc5e 100644 --- a/host/lib/usrp_clock/usrp_clock_c.cpp +++ b/host/lib/usrp_clock/usrp_clock_c.cpp @@ -11,8 +11,8 @@  #include <uhd/usrp_clock/usrp_clock.h>  #include <uhd/utils/static.hpp>  #include <string.h> -#include <boost/thread/mutex.hpp>  #include <map> +#include <mutex>  /****************************************************************************   * Registry / Pointer Management @@ -42,11 +42,11 @@ UHD_SINGLETON_FCN(usrp_clock_ptrs, get_usrp_clock_ptrs);  /****************************************************************************   * Generate / Destroy API calls   ***************************************************************************/ -static boost::mutex _usrp_clock_find_mutex; +static std::mutex _usrp_clock_find_mutex;  uhd_error uhd_usrp_clock_find(const char* args, uhd_string_vector_t* devices_out)  {      UHD_SAFE_C( -        boost::mutex::scoped_lock lock(_usrp_clock_find_mutex); +        std::lock_guard<std::mutex> lock(_usrp_clock_find_mutex);          uhd::device_addrs_t devs =              uhd::device::find(std::string(args), uhd::device::CLOCK); @@ -55,10 +55,10 @@ uhd_error uhd_usrp_clock_find(const char* args, uhd_string_vector_t* devices_out               : devs) { devices_out->string_vector_cpp.push_back(dev.to_string()); })  } -static boost::mutex _usrp_clock_make_mutex; +static std::mutex _usrp_clock_make_mutex;  uhd_error uhd_usrp_clock_make(uhd_usrp_clock_handle* h, const char* args)  { -    UHD_SAFE_C(boost::mutex::scoped_lock lock(_usrp_clock_make_mutex); +    UHD_SAFE_C(std::lock_guard<std::mutex> lock(_usrp_clock_make_mutex);                 size_t usrp_clock_count = usrp_clock_ptr::usrp_clock_counter;                 usrp_clock_ptr::usrp_clock_counter++; @@ -76,10 +76,10 @@ uhd_error uhd_usrp_clock_make(uhd_usrp_clock_handle* h, const char* args)                 (*h)->usrp_clock_index = usrp_clock_count;)  } -static boost::mutex _usrp_clock_free_mutex; +static std::mutex _usrp_clock_free_mutex;  uhd_error uhd_usrp_clock_free(uhd_usrp_clock_handle* h)  { -    UHD_SAFE_C(boost::mutex::scoped_lock lock(_usrp_clock_free_mutex); +    UHD_SAFE_C(std::lock_guard<std::mutex> lock(_usrp_clock_free_mutex);                 if (!get_usrp_clock_ptrs().count((*h)->usrp_clock_index)) {                     return UHD_ERROR_INVALID_DEVICE; diff --git a/host/lib/utils/tasks.cpp b/host/lib/utils/tasks.cpp index 0eddd2488..95219cb0c 100644 --- a/host/lib/utils/tasks.cpp +++ b/host/lib/utils/tasks.cpp @@ -16,6 +16,7 @@  #include <exception>  #include <functional>  #include <iostream> +#include <mutex>  #include <thread>  #include <vector> @@ -106,7 +107,7 @@ public:       */      msg_payload_t get_msg_from_dump_queue(uint32_t sid) override      { -        boost::mutex::scoped_lock lock(_mutex); +        std::lock_guard<std::mutex> lock(_mutex);          msg_payload_t b;          for (size_t i = 0; i < _dump_queue.size(); i++) {              if (sid == _dump_queue[i].first) { @@ -133,7 +134,7 @@ private:                       * pushed to the dump_queue. This way ctrl_cores can check dump_queue                       * for missing messages.                       */ -                    boost::mutex::scoped_lock lock(_mutex); +                    std::lock_guard<std::mutex> lock(_mutex);                      _dump_queue.push_back(buff.get());                  }              } @@ -155,7 +156,7 @@ private:              << "The task loop will now exit, things may not work." << msg;      } -    boost::mutex _mutex; +    std::mutex _mutex;      boost::thread_group _thread_group;      boost::barrier _spawn_barrier;      bool _running; | 
