From 945eec500b6d93b1312e95e76eda99333c103ada Mon Sep 17 00:00:00 2001
From: philippegorley <philippe.gorley@savoirfairelinux.com>
Date: Wed, 4 Jul 2018 14:28:28 -0400
Subject: [PATCH] thread: add blocking join

Adds a way to wait until the thread finishes its work before joining.

Change-Id: I7080a4515ce6c1158c74c6eb8973a13a4b097419
---
 src/threadloop.cpp | 10 +++++++++-
 src/threadloop.h   |  1 +
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/threadloop.cpp b/src/threadloop.cpp
index 1f95bb67c9..75c4cd7297 100644
--- a/src/threadloop.cpp
+++ b/src/threadloop.cpp
@@ -110,7 +110,15 @@ ThreadLoop::join()
         thread_.join();
 }
 
-void ThreadLoop::exit()
+void
+ThreadLoop::waitForCompletion()
+{
+    if (thread_.joinable())
+        thread_.join();
+}
+
+void
+ThreadLoop::exit()
 {
     stop();
     throw ThreadLoopException();
diff --git a/src/threadloop.h b/src/threadloop.h
index 33d6bf8ea6..ff6d6111b0 100644
--- a/src/threadloop.h
+++ b/src/threadloop.h
@@ -55,6 +55,7 @@ public:
     void exit();
     virtual void stop();
     void join();
+    void waitForCompletion(); // thread will stop itself
 
     bool isRunning() const noexcept;
     bool isStopping() const noexcept;
-- 
GitLab