refs #255 Use QMutex and std::atomic instead of QReadWriteLock

This commit is contained in:
Roland Winklmeier
2014-08-03 16:09:36 +02:00
parent 94e0c61e97
commit c8f41beea9
2 changed files with 17 additions and 35 deletions

View File

@@ -26,16 +26,9 @@ namespace BlackCore
m_micTestResult(Cvatlib_Voice_Simple::agc_Ok), m_micTestResult(Cvatlib_Voice_Simple::agc_Ok),
m_isAudioLoopbackEnabled(false), m_isAudioLoopbackEnabled(false),
m_temporaryUserRoomIndex(CVoiceVatlib::InvalidRoomIndex), m_temporaryUserRoomIndex(CVoiceVatlib::InvalidRoomIndex),
m_lockVoiceRooms(QReadWriteLock::Recursive), m_lockCurrentOutputDevice(QMutex::Recursive),
m_lockCallsigns(QReadWriteLock::Recursive), m_lockCurrentInputDevice(QMutex::Recursive),
m_lockCurrentOutputDevice(QReadWriteLock::Recursive), m_lockDeviceList(QMutex::Recursive)
m_lockCurrentInputDevice(QReadWriteLock::Recursive),
m_lockDeviceList(QReadWriteLock::Recursive),
m_lockOutputEnabled(QReadWriteLock::Recursive),
m_lockSquelch(QReadWriteLock::Recursive),
m_lockTestResult(QReadWriteLock::Recursive),
m_lockMyCallsign(QReadWriteLock::Recursive),
m_lockConnectionStatus(QReadWriteLock::Recursive),
{ {
try try
{ {
@@ -75,7 +68,7 @@ namespace BlackCore
*/ */
const BlackMisc::Audio::CAudioDeviceList &CVoiceVatlib::audioDevices() const const BlackMisc::Audio::CAudioDeviceList &CVoiceVatlib::audioDevices() const
{ {
QReadLocker lockForReading(&m_lockDeviceList); QMutexLocker lockForReading(&m_lockDeviceList);
return m_devices; return m_devices;
} }
@@ -102,7 +95,7 @@ namespace BlackCore
*/ */
CAudioDevice CVoiceVatlib::getCurrentOutputDevice() const CAudioDevice CVoiceVatlib::getCurrentOutputDevice() const
{ {
QReadLocker lockForReading(&m_lockCurrentOutputDevice); QMutexLocker locker(&m_lockCurrentOutputDevice);
return m_currentOutputDevice; return m_currentOutputDevice;
} }
@@ -111,7 +104,7 @@ namespace BlackCore
*/ */
CAudioDevice CVoiceVatlib::getCurrentInputDevice() const CAudioDevice CVoiceVatlib::getCurrentInputDevice() const
{ {
QReadLocker lockForReading(&m_lockCurrentInputDevice); QMutexLocker locker(&m_lockCurrentInputDevice);
return m_currentInputDevice; return m_currentInputDevice;
} }
@@ -138,7 +131,7 @@ namespace BlackCore
{ {
qWarning() << "Input device hit a fatal error"; qWarning() << "Input device hit a fatal error";
} }
QWriteLocker lockForWriting(&m_lockCurrentInputDevice); QMutexLocker writeLocker(&m_lockCurrentInputDevice);
this->m_currentInputDevice = device; this->m_currentInputDevice = device;
} }
catch (...) catch (...)
@@ -168,7 +161,7 @@ namespace BlackCore
{ {
qWarning() << "Output device hit a fatal error"; qWarning() << "Output device hit a fatal error";
} }
QWriteLocker lockForWriting(&m_lockCurrentOutputDevice); QMutexLocker writeLocker(&m_lockCurrentOutputDevice);
this->m_currentOutputDevice = device; this->m_currentOutputDevice = device;
} }
catch (...) catch (...)
@@ -298,7 +291,6 @@ namespace BlackCore
*/ */
float CVoiceVatlib::inputSquelch() const float CVoiceVatlib::inputSquelch() const
{ {
QReadLocker lockForReading(&m_lockSquelch);
return m_inputSquelch; return m_inputSquelch;
} }
@@ -307,7 +299,6 @@ namespace BlackCore
*/ */
qint32 CVoiceVatlib::micTestResult() const qint32 CVoiceVatlib::micTestResult() const
{ {
QReadLocker lockForReading(&m_lockTestResult);
return m_micTestResult; return m_micTestResult;
} }
@@ -318,7 +309,6 @@ namespace BlackCore
{ {
QString result; QString result;
QReadLocker lockForReading(&m_lockTestResult);
switch (m_micTestResult) switch (m_micTestResult)
{ {
case Cvatlib_Voice_Simple::agc_Ok: case Cvatlib_Voice_Simple::agc_Ok:
@@ -573,7 +563,6 @@ namespace BlackCore
try try
{ {
m_vatlib->EndFindSquelch(); m_vatlib->EndFindSquelch();
QWriteLocker lockForWriting(&m_lockSquelch);
m_inputSquelch = m_vatlib->GetInputSquelch(); m_inputSquelch = m_vatlib->GetInputSquelch();
emit squelchTestFinished(); emit squelchTestFinished();
} }
@@ -590,7 +579,6 @@ namespace BlackCore
try try
{ {
QWriteLocker lockForWriting(&m_lockTestResult);
m_micTestResult = m_vatlib->EndMicTest(); m_micTestResult = m_vatlib->EndMicTest();
emit micTestFinished(); emit micTestFinished();
} }
@@ -715,7 +703,7 @@ namespace BlackCore
{ {
Q_UNUSED(obj) Q_UNUSED(obj)
BlackMisc::Audio::CAudioDevice inputDevice(BlackMisc::Audio::CAudioDevice::InputDevice, cbvar_cast_voice(cbVar)->m_devices.count(BlackMisc::Audio::CAudioDevice::InputDevice), QString(name)); BlackMisc::Audio::CAudioDevice inputDevice(BlackMisc::Audio::CAudioDevice::InputDevice, cbvar_cast_voice(cbVar)->m_devices.count(BlackMisc::Audio::CAudioDevice::InputDevice), QString(name));
QWriteLocker lockForWriting(&(cbvar_cast_voice(cbVar)->m_lockDeviceList)); QMutexLocker lockForWriting(&(cbvar_cast_voice(cbVar)->m_lockDeviceList));
cbvar_cast_voice(cbVar)->m_devices.push_back(inputDevice); cbvar_cast_voice(cbVar)->m_devices.push_back(inputDevice);
} }
@@ -726,7 +714,7 @@ namespace BlackCore
{ {
Q_UNUSED(obj) Q_UNUSED(obj)
BlackMisc::Audio::CAudioDevice outputDevice(BlackMisc::Audio::CAudioDevice::OutputDevice, cbvar_cast_voice(cbVar)->m_devices.count(BlackMisc::Audio::CAudioDevice::OutputDevice), QString(name)); BlackMisc::Audio::CAudioDevice outputDevice(BlackMisc::Audio::CAudioDevice::OutputDevice, cbvar_cast_voice(cbVar)->m_devices.count(BlackMisc::Audio::CAudioDevice::OutputDevice), QString(name));
QWriteLocker lockForWriting(&(cbvar_cast_voice(cbVar)->m_lockDeviceList)); QMutexLocker lockForWriting(&(cbvar_cast_voice(cbVar)->m_lockDeviceList));
cbvar_cast_voice(cbVar)->m_devices.push_back(outputDevice); cbvar_cast_voice(cbVar)->m_devices.push_back(outputDevice);
} }

View File

@@ -18,6 +18,7 @@
#include <QString> #include <QString>
#include <QMutex> #include <QMutex>
#include <QReadWriteLock> #include <QReadWriteLock>
#include <atomic>
#include <utility> #include <utility>
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
@@ -57,6 +58,7 @@ namespace BlackCore
Q_OBJECT Q_OBJECT
public: public:
/*! /*!
* \brief Constructor * \brief Constructor
* \param parent * \param parent
@@ -238,8 +240,8 @@ namespace BlackCore
BlackMisc::Audio::CAudioDeviceList m_devices; /*!< in and output devices */ BlackMisc::Audio::CAudioDeviceList m_devices; /*!< in and output devices */
BlackMisc::Audio::CAudioDevice m_currentOutputDevice; BlackMisc::Audio::CAudioDevice m_currentOutputDevice;
BlackMisc::Audio::CAudioDevice m_currentInputDevice; BlackMisc::Audio::CAudioDevice m_currentInputDevice;
float m_inputSquelch; std::atomic<float> m_inputSquelch;
Cvatlib_Voice_Simple::agc m_micTestResult; std::atomic<Cvatlib_Voice_Simple::agc> m_micTestResult;
QMap <ComUnit, BlackMisc::Aviation::CCallsignList> m_voiceRoomCallsigns; /*!< voice room callsigns */ QMap <ComUnit, BlackMisc::Aviation::CCallsignList> m_voiceRoomCallsigns; /*!< voice room callsigns */
BlackMisc::Aviation::CCallsignList m_temporaryVoiceRoomCallsigns; /*!< temp. storage of voice rooms during update */ BlackMisc::Aviation::CCallsignList m_temporaryVoiceRoomCallsigns; /*!< temp. storage of voice rooms during update */
QMap<ComUnit, bool> m_outputEnabled; /*!< output enabled, basically a mute flag */ QMap<ComUnit, bool> m_outputEnabled; /*!< output enabled, basically a mute flag */
@@ -253,17 +255,9 @@ namespace BlackCore
const static qint32 InvalidRoomIndex = -1; /*! marks invalid room */ const static qint32 InvalidRoomIndex = -1; /*! marks invalid room */
// Thread serialization // Thread serialization
mutable QReadWriteLock m_lockVoiceRooms; mutable QMutex m_lockCurrentOutputDevice;
mutable QReadWriteLock m_lockCallsigns; mutable QMutex m_lockCurrentInputDevice;
mutable QReadWriteLock m_lockCurrentOutputDevice; mutable QMutex m_lockDeviceList;
mutable QReadWriteLock m_lockCurrentInputDevice;
mutable QReadWriteLock m_lockDeviceList;
mutable QReadWriteLock m_lockOutputEnabled;
mutable QReadWriteLock m_lockSquelch;
mutable QReadWriteLock m_lockTestResult;
mutable QReadWriteLock m_lockMyCallsign;
mutable QReadWriteLock m_lockConnectionStatus;
}; };
} // namespace } // namespace