aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/utils/tasks.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'host/lib/utils/tasks.cpp')
-rw-r--r--host/lib/utils/tasks.cpp116
1 files changed, 58 insertions, 58 deletions
diff --git a/host/lib/utils/tasks.cpp b/host/lib/utils/tasks.cpp
index a2d7f82d3..ce6e1716c 100644
--- a/host/lib/utils/tasks.cpp
+++ b/host/lib/utils/tasks.cpp
@@ -21,19 +21,19 @@
using namespace uhd;
-class task_impl : public task{
+class task_impl : public task
+{
public:
-
- task_impl(const task_fcn_type &task_fcn, const std::string &name):
- _exit(false)
+ task_impl(const task_fcn_type& task_fcn, const std::string& name) : _exit(false)
{
- _task = std::thread([this, task_fcn](){ this->task_loop(task_fcn); });
+ _task = std::thread([this, task_fcn]() { this->task_loop(task_fcn); });
if (not name.empty()) {
set_thread_name(&_task, name);
}
}
- ~task_impl(void){
+ ~task_impl(void)
+ {
_exit = true;
if (_task.joinable()) {
_task.join();
@@ -41,37 +41,37 @@ public:
}
private:
- void task_loop(const task_fcn_type &task_fcn){
- try{
- while (!_exit){
+ void task_loop(const task_fcn_type& task_fcn)
+ {
+ try {
+ while (!_exit) {
task_fcn();
}
- }
- catch(const std::exception &e){
+ } catch (const std::exception& e) {
do_error_msg(e.what());
- }
- catch(...){
+ } catch (...) {
UHD_THROW_INVALID_CODE_PATH();
}
}
- void do_error_msg(const std::string &msg){
+ void do_error_msg(const std::string& msg)
+ {
UHD_LOGGER_ERROR("UHD")
<< "An unexpected exception was caught in a task loop."
- << "The task loop will now exit, things may not work."
- << msg
- ;
+ << "The task loop will now exit, things may not work." << msg;
}
std::atomic<bool> _exit;
std::thread _task;
};
-task::sptr task::make(const task_fcn_type &task_fcn, const std::string &name){
+task::sptr task::make(const task_fcn_type& task_fcn, const std::string& name)
+{
return task::sptr(new task_impl(task_fcn, name));
}
-msg_task::~msg_task(void){
+msg_task::~msg_task(void)
+{
/* NOP */
}
@@ -81,17 +81,18 @@ msg_task::~msg_task(void){
* ctrl_cores can check this queue for stranded messages.
*/
-class msg_task_impl : public msg_task{
+class msg_task_impl : public msg_task
+{
public:
-
- msg_task_impl(const task_fcn_type &task_fcn):
- _spawn_barrier(2)
+ msg_task_impl(const task_fcn_type& task_fcn) : _spawn_barrier(2)
{
- (void)_thread_group.create_thread(std::bind(&msg_task_impl::task_loop, this, task_fcn));
+ (void)_thread_group.create_thread(
+ std::bind(&msg_task_impl::task_loop, this, task_fcn));
_spawn_barrier.wait();
}
- ~msg_task_impl(void){
+ ~msg_task_impl(void)
+ {
_running = false;
_thread_group.interrupt_all();
_thread_group.join_all();
@@ -99,8 +100,8 @@ public:
/*
* Returns the first message for the given SID.
- * This way a radio_ctrl_core doesn't have to die in timeout but can check for stranded messages here.
- * This might happen during shutdown when dtors are called.
+ * This way a radio_ctrl_core doesn't have to die in timeout but can check for
+ * stranded messages here. This might happen during shutdown when dtors are called.
* See also: comments in b200_io_impl->handle_async_task
*/
msg_payload_t get_msg_from_dump_queue(uint32_t sid)
@@ -118,43 +119,40 @@ public:
}
private:
-
- void task_loop(const task_fcn_type &task_fcn){
+ void task_loop(const task_fcn_type& task_fcn)
+ {
_running = true;
_spawn_barrier.wait();
- try{
- while (_running){
- boost::optional<msg_type_t> buff = task_fcn();
- if(buff != boost::none){
- /*
- * If a message gets stranded it is returned by task_fcn and then pushed to the dump_queue.
- * This way ctrl_cores can check dump_queue for missing messages.
- */
- boost::mutex::scoped_lock lock(_mutex);
- _dump_queue.push_back(buff.get() );
- }
+ try {
+ while (_running) {
+ boost::optional<msg_type_t> buff = task_fcn();
+ if (buff != boost::none) {
+ /*
+ * If a message gets stranded it is returned by task_fcn and then
+ * pushed to the dump_queue. This way ctrl_cores can check dump_queue
+ * for missing messages.
+ */
+ boost::mutex::scoped_lock lock(_mutex);
+ _dump_queue.push_back(buff.get());
+ }
}
- }
- catch(const boost::thread_interrupted &){
- //this is an ok way to exit the task loop
- }
- catch(const std::exception &e){
+ } catch (const boost::thread_interrupted&) {
+ // this is an ok way to exit the task loop
+ } catch (const std::exception& e) {
do_error_msg(e.what());
- }
- catch(...){
- //FIXME
- //Unfortunately, this is also an ok way to end a task,
- //because on some systems boost throws uncatchables.
+ } catch (...) {
+ // FIXME
+ // Unfortunately, this is also an ok way to end a task,
+ // because on some systems boost throws uncatchables.
}
}
- void do_error_msg(const std::string &msg){
+ void do_error_msg(const std::string& msg)
+ {
UHD_LOGGER_ERROR("UHD")
- << "An unexpected exception was caught in a task loop."
- << "The task loop will now exit, things may not work."
- << msg
- ;
+ << "An unexpected exception was caught in a task loop."
+ << "The task loop will now exit, things may not work." << msg;
}
boost::mutex _mutex;
@@ -163,11 +161,13 @@ private:
bool _running;
/*
- * This queue holds stranded messages until a radio_ctrl_core grabs them via 'get_msg_from_dump_queue'.
+ * This queue holds stranded messages until a radio_ctrl_core grabs them via
+ * 'get_msg_from_dump_queue'.
*/
- std::vector <msg_type_t> _dump_queue;
+ std::vector<msg_type_t> _dump_queue;
};
-msg_task::sptr msg_task::make(const task_fcn_type &task_fcn){
+msg_task::sptr msg_task::make(const task_fcn_type& task_fcn)
+{
return msg_task::sptr(new msg_task_impl(task_fcn));
}