From c37d7083a0d8c66ba0c3b7e65b01066716361730 Mon Sep 17 00:00:00 2001
From: Nicolas Pope <nwpope@utu.fi>
Date: Mon, 9 Nov 2020 19:55:49 +0200
Subject: [PATCH] Use timeout exceptions

---
 SDK/CPP/private/pipeline_impl.cpp                | 4 +++-
 SDK/CPP/private/pipeline_impl.hpp                | 2 +-
 SDK/CPP/public/include/voltu/pipeline.hpp        | 2 +-
 SDK/CPP/public/include/voltu/voltu.hpp           | 2 +-
 SDK/CPP/public/samples/fusion_evaluator/main.cpp | 4 ++--
 5 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/SDK/CPP/private/pipeline_impl.cpp b/SDK/CPP/private/pipeline_impl.cpp
index cdc52fce3..7fbbc5131 100644
--- a/SDK/CPP/private/pipeline_impl.cpp
+++ b/SDK/CPP/private/pipeline_impl.cpp
@@ -42,10 +42,12 @@ void PipelineImpl::submit(const voltu::FramePtr &frame)
 	}
 }
 
-bool PipelineImpl::waitCompletion(int timeout)
+bool PipelineImpl::waitCompletion(int timeout, bool except)
 {
 	int count = timeout / 5;
 	while (!ready_ && --count >= 0) std::this_thread::sleep_for(std::chrono::milliseconds(5));
+
+	if (!ready_) throw voltu::exceptions::Timeout();
 	return ready_;
 }
 
diff --git a/SDK/CPP/private/pipeline_impl.hpp b/SDK/CPP/private/pipeline_impl.hpp
index 98fe41c90..3413f067a 100644
--- a/SDK/CPP/private/pipeline_impl.hpp
+++ b/SDK/CPP/private/pipeline_impl.hpp
@@ -16,7 +16,7 @@ public:
 
 	void submit(const voltu::FramePtr &frame) override;
 
-	bool waitCompletion(int timeout) override;
+	bool waitCompletion(int timeout, bool except) override;
 
 	voltu::OperatorPtr appendOperator(voltu::OperatorId id) override;
 
diff --git a/SDK/CPP/public/include/voltu/pipeline.hpp b/SDK/CPP/public/include/voltu/pipeline.hpp
index f8a201bac..4e2c4ee89 100644
--- a/SDK/CPP/public/include/voltu/pipeline.hpp
+++ b/SDK/CPP/public/include/voltu/pipeline.hpp
@@ -64,7 +64,7 @@ public:
 	 * @param timeout Millisecond timeout, or 0 for non-blocking check.
 	 * @return True if completed
 	 */
-	PY_API virtual bool waitCompletion(int timeout) = 0;
+	PY_API virtual bool waitCompletion(int timeout, bool except=false) = 0;
 
 	/**
 	 * @brief Add an operator to this pipeline.
diff --git a/SDK/CPP/public/include/voltu/voltu.hpp b/SDK/CPP/public/include/voltu/voltu.hpp
index d3e1413b4..c59518dcf 100644
--- a/SDK/CPP/public/include/voltu/voltu.hpp
+++ b/SDK/CPP/public/include/voltu/voltu.hpp
@@ -8,7 +8,7 @@
 
 // Bump these for each release
 #define VOLTU_VERSION_MAJOR 0    // For API incompatible changes
-#define VOLTU_VERSION_MINOR 3    // For binary compatibility and extensions
+#define VOLTU_VERSION_MINOR 4    // For binary compatibility and extensions
 #define VOLTU_VERSION_PATCH 0    // Binary compatible internal fixes
 
 #define VOLTU_VERSION ((VOLTU_VERSION_MAJOR*10000) + (VOLTU_VERSION_MINOR*100) + VOLTU_VERSION_PATCH)
diff --git a/SDK/CPP/public/samples/fusion_evaluator/main.cpp b/SDK/CPP/public/samples/fusion_evaluator/main.cpp
index 85abd616a..b56ab129b 100644
--- a/SDK/CPP/public/samples/fusion_evaluator/main.cpp
+++ b/SDK/CPP/public/samples/fusion_evaluator/main.cpp
@@ -91,7 +91,7 @@ int main(int argc, char **argv)
 
 	for (int i=0; i<frameno; ++i)
 	{
-		room->waitNextFrame(5000);
+		room->waitNextFrame(5000, true);
 		room->getFrame();
 	}
 	auto frame = room->getFrame();
@@ -108,7 +108,7 @@ int main(int argc, char **argv)
 	op1->property("mls_iterations")->setInt(iters);
 
 	pipe->submit(frame);
-	pipe->waitCompletion(3000);
+	pipe->waitCompletion(3000, true);
 
 	auto imgset = frame->getImageSet(display_channel);
 
-- 
GitLab