From cff85a621e3fd5a4cf43809584dedfcd9e8b0efe Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Mon, 9 Jan 2017 21:25:15 +0100 Subject: logic/libs: options/scoped: don't reset dialog on proto load failure --- logic/selected-libraries.cpp | 15 ++++++++++++--- options/scoped.hpp | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/logic/selected-libraries.cpp b/logic/selected-libraries.cpp index 4a1a9f09..ffa3e496 100644 --- a/logic/selected-libraries.cpp +++ b/logic/selected-libraries.cpp @@ -1,4 +1,5 @@ #include "selected-libraries.hpp" +#include "options/scoped.hpp" #include SelectedLibraries::SelectedLibraries(QFrame* frame, dylibptr t, dylibptr p, dylibptr f) : @@ -7,19 +8,25 @@ SelectedLibraries::SelectedLibraries(QFrame* frame, dylibptr t, dylibptr p, dyli pProtocol(nullptr), correct(false) { + using namespace options; + + const bool prev_teardown_flag = opts::is_tracker_teardown(); + + opts::set_teardown_flag(true); + pProtocol = make_dylib_instance(p); if (!pProtocol) { qDebug() << "protocol dylib load failure"; - return; + goto end; } if(!pProtocol->correct()) { qDebug() << "protocol load failure"; pProtocol = nullptr; - return; + goto end; } pTracker = make_dylib_instance(t); @@ -28,10 +35,12 @@ SelectedLibraries::SelectedLibraries(QFrame* frame, dylibptr t, dylibptr p, dyli if (!pTracker) { qDebug() << "tracker dylib load failure"; - return; + goto end; } pTracker->start_tracker(frame); correct = true; +end: + opts::set_teardown_flag(prev_teardown_flag); } diff --git a/options/scoped.hpp b/options/scoped.hpp index 4ad51fea..fd797219 100644 --- a/options/scoped.hpp +++ b/options/scoped.hpp @@ -19,9 +19,9 @@ struct OPENTRACK_OPTIONS_EXPORT opts // XXX hack: the flag shouldn't be here as action at distance -sh 20160926 static void set_teardown_flag(bool value); + static bool is_tracker_teardown(); private: static std::atomic_bool teardown_flag; - static bool is_tracker_teardown(); static void ensure_thread(); }; -- cgit v1.2.3