From 982ab8f4bf8b20ec9814768caa2b0a11b269c812 Mon Sep 17 00:00:00 2001
From: Joseph Mirabel <jmirabel@laas.fr>
Date: Tue, 25 Feb 2020 14:08:27 +0100
Subject: [PATCH] [TracerRealTime] Fix addSignalToTrace for exception handling

---
 src/traces/tracer.cpp            |  5 +++--
 tests/debug-real-time-tracer.cpp | 11 ++++++++---
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/traces/tracer.cpp b/src/traces/tracer.cpp
index 9f6dfb9..99dadd7 100644
--- a/src/traces/tracer.cpp
+++ b/src/traces/tracer.cpp
@@ -88,11 +88,12 @@ Tracer::Tracer(const std::string n)
 void Tracer::addSignalToTrace(const SignalBase<int> &sig,
                               const string &filename) {
   dgDEBUGIN(15);
+  // openFile may throw so it should be called first.
+  if (namesSet)
+    openFile(sig, filename);
   toTraceSignals.push_back(&sig);
   dgDEBUGF(15, "%p", &sig);
   names.push_back(filename);
-  if (namesSet)
-    openFile(sig, filename);
   triger.addDependency(sig);
   dgDEBUGOUT(15);
 }
diff --git a/tests/debug-real-time-tracer.cpp b/tests/debug-real-time-tracer.cpp
index 60d8ce0..b1de9db 100644
--- a/tests/debug-real-time-tracer.cpp
+++ b/tests/debug-real-time-tracer.cpp
@@ -65,11 +65,16 @@ BOOST_AUTO_TEST_CASE(test_tracer) {
   std::string basename("my-tracer");
   std::string suffix(".dat");
 
-  /// Test openfiles
   atracer.setBufferSize(1<<14);
-  atracer.openFiles(rootdir, basename, suffix);
 
-  /// Add trace by name
+  // Check that an exception is thrown if the filename is invalid.
+  atracer.openFiles(rootdir, "invalid/filename", suffix);
+  BOOST_CHECK_THROW(atracer.addSignalToTraceByName("my-entity.out_double", "output"),
+      ExceptionTraces);
+
+  // Test openfiles
+  atracer.openFiles(rootdir, basename, suffix);
+  // Add trace by name
   atracer.addSignalToTraceByName("my-entity.out_double", "output");
 
   /// Add trace by name
-- 
GitLab