diff --git a/libraries/AP_HAL_Linux/Thread.cpp b/libraries/AP_HAL_Linux/Thread.cpp index d48a85d4ca..7b12bd1418 100644 --- a/libraries/AP_HAL_Linux/Thread.cpp +++ b/libraries/AP_HAL_Linux/Thread.cpp @@ -205,6 +205,23 @@ bool Thread::is_current_thread() return pthread_equal(pthread_self(), _ctx); } +bool Thread::join() +{ + void *ret; + + if (_ctx == 0) { + return false; + } + + if (pthread_join(_ctx, &ret) != 0 || + (intptr_t)ret != 0) { + return false; + } + + return true; +} + + bool PeriodicThread::set_rate(uint32_t rate_hz) { if (_started || rate_hz == 0) { diff --git a/libraries/AP_HAL_Linux/Thread.h b/libraries/AP_HAL_Linux/Thread.h index d372d01d79..36995dbe0b 100644 --- a/libraries/AP_HAL_Linux/Thread.h +++ b/libraries/AP_HAL_Linux/Thread.h @@ -47,6 +47,8 @@ public: virtual bool stop() { return false; } + bool join(); + protected: static void *_run_trampoline(void *arg);