From f0790cee70bb95209f42ea54e2a96f17b02110d6 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Thu, 12 Jun 2014 03:51:52 +0200 Subject: Fix lock order reversal --- FTNoIR_Tracker_PT/ftnoir_tracker_pt.cpp | 20 +++++++++----------- FTNoIR_Tracker_PT/ftnoir_tracker_pt.h | 5 +++-- 2 files changed, 12 insertions(+), 13 deletions(-) (limited to 'FTNoIR_Tracker_PT') diff --git a/FTNoIR_Tracker_PT/ftnoir_tracker_pt.cpp b/FTNoIR_Tracker_PT/ftnoir_tracker_pt.cpp index 787a5128..e3823291 100644 --- a/FTNoIR_Tracker_PT/ftnoir_tracker_pt.cpp +++ b/FTNoIR_Tracker_PT/ftnoir_tracker_pt.cpp @@ -23,12 +23,13 @@ const float deg2rad = 1.0/rad2deg; //----------------------------------------------------------------------------- Tracker::Tracker() - : commands(0), + : mutex(QMutex::Recursive), + commands(0), video_widget(NULL), video_frame(NULL), tracking_valid(false), - need_apply(false), - new_settings(nullptr) + new_settings(nullptr) + { qDebug()<<"Tracker::Tracker"; } @@ -115,21 +116,18 @@ void Tracker::run() } void Tracker::apply(settings& s) { - QMutexLocker lock(&mutex); - need_apply = true; - // caller guarantees object lifetime + // caller guarantees object lifetime new_settings = &s; } void Tracker::apply_inner() { - QMutexLocker lock(&mutex); - if (!need_apply) - return; qDebug()<<"Tracker:: Applying settings"; - auto& s = *new_settings; + settings* tmp = new_settings; + if (tmp == nullptr) + return; + auto& s = *tmp; new_settings = nullptr; - need_apply = false; camera.set_device_index(s.cam_index); camera.set_res(s.cam_res_x, s.cam_res_y); camera.set_fps(s.cam_fps); diff --git a/FTNoIR_Tracker_PT/ftnoir_tracker_pt.h b/FTNoIR_Tracker_PT/ftnoir_tracker_pt.h index 47a9987b..190ed76a 100644 --- a/FTNoIR_Tracker_PT/ftnoir_tracker_pt.h +++ b/FTNoIR_Tracker_PT/ftnoir_tracker_pt.h @@ -25,6 +25,7 @@ #include #include #include +#include #ifndef OPENTRACK_API # include #else @@ -82,10 +83,10 @@ protected: PTVideoWidget* video_widget; QFrame* video_frame; - bool tracking_valid, need_apply; + bool tracking_valid; settings s; - settings* new_settings; + std::atomic new_settings; Timer time; }; -- cgit v1.2.3