diff --git a/interface/cuvis.hpp b/interface/cuvis.hpp index 89ba8ea..2557305 100644 --- a/interface/cuvis.hpp +++ b/interface/cuvis.hpp @@ -1526,9 +1526,9 @@ namespace cuvis std::shared_ptr _worker; - std::atomic_bool _worker_poll_thread_run; - - std::thread _worker_poll_thread; + std::atomic_bool _worker_poll_thread_run = false; + mutable std::mutex _worker_poll_thread_lock; + std::shared_ptr _worker_poll_thread; }; /** \cond INTERNAL */ @@ -2216,10 +2216,10 @@ namespace cuvis reset_worker_callback(); static const std::chrono::milliseconds poll_time = std::chrono::milliseconds(1); - + std::lock_guard lock(_worker_poll_thread_lock); _worker_poll_thread_run = true; - _worker_poll_thread = std::thread([this, callback, concurrency, measurement_timeout_ms] + _worker_poll_thread = std::make_shared([this, callback, concurrency, measurement_timeout_ms] { std::deque> async_tasks; while (_worker_poll_thread_run.load()) @@ -2261,10 +2261,12 @@ namespace cuvis inline void Worker::reset_worker_callback() { + std::lock_guard lock(_worker_poll_thread_lock); _worker_poll_thread_run = false; - if (_worker_poll_thread.joinable()) + if (_worker_poll_thread && _worker_poll_thread->joinable()) { - _worker_poll_thread.join(); + _worker_poll_thread->join(); + _worker_poll_thread.reset(); } }