diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2019-01-16 05:58:48 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2019-01-16 07:49:13 +0100 |
commit | 03d28dde1635e36508cff1f9eabc265cdb5febb9 (patch) | |
tree | ee62d5851315c7b4c2c3c05f8a72e29a6dd4a1e8 | |
parent | f8faca0abecafd6e65d07bd0fdd618070114cdfa (diff) |
compat/mutex: remove
Always use the adaptive QMutex.
-rw-r--r-- | compat/check-visible.cpp | 11 | ||||
-rw-r--r-- | compat/spinlock.hpp | 31 | ||||
-rw-r--r-- | dinput/dinput.cpp | 7 | ||||
-rw-r--r-- | dinput/dinput.hpp | 6 | ||||
-rw-r--r-- | gui/init.cpp | 6 | ||||
-rw-r--r-- | logic/pipeline.cpp | 6 | ||||
-rw-r--r-- | logic/pipeline.hpp | 3 | ||||
-rw-r--r-- | proto-udp/ftnoir_protocol_ftn.cpp | 7 | ||||
-rw-r--r-- | proto-udp/ftnoir_protocol_ftn.h | 3 | ||||
-rw-r--r-- | tracker-pt/ftnoir_tracker_pt.cpp | 13 | ||||
-rw-r--r-- | tracker-pt/ftnoir_tracker_pt.h | 3 |
11 files changed, 29 insertions, 67 deletions
diff --git a/compat/check-visible.cpp b/compat/check-visible.cpp index 2772c9ae..1212ab90 100644 --- a/compat/check-visible.cpp +++ b/compat/check-visible.cpp @@ -1,11 +1,10 @@ #include "check-visible.hpp" +#include <QMutex> #include <QWidget> #include <QDebug> -#include "spinlock.hpp" - -static std::atomic_flag lock = ATOMIC_FLAG_INIT; +static QMutex lock; static bool visible = true; #if defined _WIN32 @@ -22,7 +21,7 @@ constexpr int invisible_timeout = 250; void set_is_visible(const QWidget& w, bool force) { - spinlock_guard l(lock); + QMutexLocker l(&lock); if (w.isHidden() || w.windowState() & Qt::WindowMinimized) { @@ -78,12 +77,12 @@ void set_is_visible(const QWidget& w, bool) bool check_is_visible() { - spinlock_guard l(lock); + QMutexLocker l(&lock); return visible; } void force_is_visible(bool value) { - spinlock_guard l(lock); + QMutexLocker l(&lock); visible = value; } diff --git a/compat/spinlock.hpp b/compat/spinlock.hpp deleted file mode 100644 index b94df7c8..00000000 --- a/compat/spinlock.hpp +++ /dev/null @@ -1,31 +0,0 @@ -#pragma once - -#include "export.hpp" -#include "macros1.h" -#include <atomic> - -struct OTR_COMPAT_EXPORT spinlock_guard final -{ - spinlock_guard(const spinlock_guard&) = delete; - spinlock_guard& operator=(const spinlock_guard&) = delete; - constexpr spinlock_guard(spinlock_guard&&) noexcept = default; - - cc_forceinline - spinlock_guard(std::atomic_flag* lock) noexcept : spinlock_guard(*lock) {} - - cc_forceinline - spinlock_guard(std::atomic_flag& lock) noexcept : lock(lock) - { - while (lock.test_and_set(std::memory_order_acquire)) - (void)0; - } - - cc_forceinline - ~spinlock_guard() noexcept - { - lock.clear(std::memory_order_release); - } - -private: - std::atomic_flag& lock; -}; diff --git a/dinput/dinput.cpp b/dinput/dinput.cpp index 75f398ad..e896f5f1 100644 --- a/dinput/dinput.cpp +++ b/dinput/dinput.cpp @@ -1,10 +1,9 @@ #include "dinput.hpp" -#include "compat/spinlock.hpp" #include <QDebug> int di_t::refcnt{0}; -std::atomic_flag di_t::lock = ATOMIC_FLAG_INIT; diptr di_t::handle; +QMutex di_t::lock; diptr di_t::init_di_() { @@ -33,7 +32,7 @@ di_t::di_t() void di_t::ref_di() { - spinlock_guard l(lock); + QMutexLocker l(&lock); if (!handle) handle = init_di_(); @@ -43,7 +42,7 @@ void di_t::ref_di() void di_t::unref_di() { - spinlock_guard l(lock); + QMutexLocker l(&lock); const int refcnt_ = --refcnt; diff --git a/dinput/dinput.hpp b/dinput/dinput.hpp index 7128229b..4bb3b458 100644 --- a/dinput/dinput.hpp +++ b/dinput/dinput.hpp @@ -8,9 +8,9 @@ #pragma once -#include "export.hpp" +#include <QMutex> -#include <atomic> +#include "export.hpp" #undef DIRECTINPUT_VERSION #define DIRECTINPUT_VERSION 0x800 @@ -26,7 +26,7 @@ class OTR_DINPUT_EXPORT di_t final static diptr handle; static int refcnt; - static std::atomic_flag lock; + static QMutex lock; static diptr init_di_(); public: diff --git a/gui/init.cpp b/gui/init.cpp index 5ed4ca00..07f6c6b1 100644 --- a/gui/init.cpp +++ b/gui/init.cpp @@ -27,6 +27,7 @@ using namespace options; #include <QFileDialog> #include <QString> #include <QOperatingSystemVersion> +#include <QMutex> #include <QDebug> @@ -101,7 +102,6 @@ static void set_qt_style() #endif } -#include "compat/spinlock.hpp" #include <string> #ifdef _WIN32 @@ -118,8 +118,8 @@ static void qdebug_to_console(QtMsgType, const QMessageLogContext& ctx, const QS if (IsDebuggerPresent()) { - static std::atomic_flag lock = ATOMIC_FLAG_INIT; - spinlock_guard l(lock); + static QMutex lock; + QMutexLocker l(&lock); const wchar_t* const bytes = (const wchar_t*)msg.utf16(); diff --git a/logic/pipeline.cpp b/logic/pipeline.cpp index 67669732..c355bf19 100644 --- a/logic/pipeline.cpp +++ b/logic/pipeline.cpp @@ -601,7 +601,7 @@ void pipeline::toggle_enabled() { b.negate(f_enabled_p); } void bits::set(bit_flags flag, bool val) { - spinlock_guard l(lock); + QMutexLocker l(&lock); flags &= ~flag; if (val) @@ -610,14 +610,14 @@ void bits::set(bit_flags flag, bool val) void bits::negate(bit_flags flag) { - spinlock_guard l(lock); + QMutexLocker l(&lock); flags ^= flag; } bool bits::get(bit_flags flag) { - spinlock_guard l(lock); + QMutexLocker l(&lock); return !!(flags & flag); } diff --git a/logic/pipeline.hpp b/logic/pipeline.hpp index 40088a5d..545a7836 100644 --- a/logic/pipeline.hpp +++ b/logic/pipeline.hpp @@ -7,7 +7,6 @@ #include "mappings.hpp" #include "compat/euler.hpp" #include "compat/enum-operators.hpp" -#include "compat/spinlock.hpp" #include "runtime-libraries.hpp" #include "extensions.hpp" @@ -70,7 +69,7 @@ enum bit_flags : unsigned { struct OTR_LOGIC_EXPORT bits { bit_flags flags{0}; - std::atomic_flag lock = ATOMIC_FLAG_INIT; + QMutex lock; void set(bit_flags flag, bool val); void negate(bit_flags flag); diff --git a/proto-udp/ftnoir_protocol_ftn.cpp b/proto-udp/ftnoir_protocol_ftn.cpp index def3ebb1..000a0a79 100644 --- a/proto-udp/ftnoir_protocol_ftn.cpp +++ b/proto-udp/ftnoir_protocol_ftn.cpp @@ -21,15 +21,16 @@ udp::udp() Qt::DirectConnection); } -void udp::pose(const double *headpose) { - spinlock_guard l(spl); +void udp::pose(const double *headpose) +{ + QMutexLocker l(&lock); outSocket.writeDatagram((const char *) headpose, sizeof(double[6]), dest_ip, dest_port); } void udp::set_dest_address() { - spinlock_guard l(spl); + QMutexLocker l(&lock); dest_port = (unsigned short)s.port; dest_ip = QHostAddress((s.ip1.to<unsigned>() & 0xff) << 24 | diff --git a/proto-udp/ftnoir_protocol_ftn.h b/proto-udp/ftnoir_protocol_ftn.h index a7c90f5b..53387a6c 100644 --- a/proto-udp/ftnoir_protocol_ftn.h +++ b/proto-udp/ftnoir_protocol_ftn.h @@ -12,7 +12,6 @@ #include "ui_ftnoir_ftncontrols.h" #include "api/plugin-api.hpp" -#include "compat/spinlock.hpp" #include "options/options.hpp" using namespace options; #include <QUdpSocket> @@ -42,7 +41,7 @@ private: QUdpSocket outSocket; settings s; - mutable std::atomic_flag spl = ATOMIC_FLAG_INIT; + mutable QMutex lock; QHostAddress dest_ip { 127u << 24 | 1u }; unsigned short dest_port = 65535; diff --git a/tracker-pt/ftnoir_tracker_pt.cpp b/tracker-pt/ftnoir_tracker_pt.cpp index da295e39..76d10d1d 100644 --- a/tracker-pt/ftnoir_tracker_pt.cpp +++ b/tracker-pt/ftnoir_tracker_pt.cpp @@ -10,12 +10,9 @@ #include "cv/video-widget.hpp" #include "compat/camera-names.hpp" #include "compat/math-imports.hpp" -#include "compat/spinlock.hpp" #include "pt-api.hpp" -#include <cmath> - #include <QHBoxLayout> #include <QDebug> #include <QFile> @@ -77,7 +74,7 @@ void Tracker_PT::run() Affine X_CM; { - spinlock_guard l(center_flag); + QMutexLocker l(¢er_lock); if (success) { @@ -88,7 +85,7 @@ void Tracker_PT::run() ever_success = true; } - spinlock_guard l2(data_lock); + QMutexLocker l2(&data_lock); X_CM = point_tracker.pose(); } @@ -151,7 +148,7 @@ void Tracker_PT::data(double *data) { Affine X_CM; { - spinlock_guard l(&data_lock); + QMutexLocker l(&data_lock); X_CM = point_tracker.pose(); } @@ -189,7 +186,7 @@ void Tracker_PT::data(double *data) bool Tracker_PT::center() { - spinlock_guard l(center_flag); + QMutexLocker l(¢er_lock); point_tracker.reset_state(); return false; @@ -211,7 +208,7 @@ bool Tracker_PT::get_cam_info(pt_camera_info& info) Affine Tracker_PT::pose() const { - spinlock_guard l(data_lock); + QMutexLocker l(&data_lock); return point_tracker.pose(); } diff --git a/tracker-pt/ftnoir_tracker_pt.h b/tracker-pt/ftnoir_tracker_pt.h index 5e9ad9b3..0226fd87 100644 --- a/tracker-pt/ftnoir_tracker_pt.h +++ b/tracker-pt/ftnoir_tracker_pt.h @@ -75,8 +75,7 @@ private: std::atomic<unsigned> point_count { 0 }; std::atomic<bool> ever_success { false }; - mutable std::atomic_flag center_flag = ATOMIC_FLAG_INIT; - mutable std::atomic_flag data_lock = ATOMIC_FLAG_INIT; + mutable QMutex center_lock, data_lock; }; } // ns pt_impl |