Update PacketReceiver to use scoped locks

This commit is contained in:
Ryan Huffman 2015-08-19 08:54:24 -07:00
parent 92dadb437c
commit cda0aaf7cf

View file

@ -12,6 +12,8 @@
#include "PacketReceiver.h" #include "PacketReceiver.h"
#include <QMutexLocker>
#include "DependencyManager.h" #include "DependencyManager.h"
#include "NetworkLogging.h" #include "NetworkLogging.h"
#include "NodeList.h" #include "NodeList.h"
@ -93,8 +95,7 @@ bool PacketReceiver::registerMessageListener(PacketType type, QObject* listener,
QMetaMethod matchingMethod = matchingMethodForListener(type, listener, slot); QMetaMethod matchingMethod = matchingMethodForListener(type, listener, slot);
if (matchingMethod.isValid()) { if (matchingMethod.isValid()) {
//registerVerifiedListener(type, listener, matchingMethod); QMutexLocker(&_packetListenerLock);
_packetListenerLock.lock();
if (_packetListListenerMap.contains(type)) { if (_packetListListenerMap.contains(type)) {
qDebug() << "Warning: Registering a packet listener for packet type" << type qDebug() << "Warning: Registering a packet listener for packet type" << type
@ -104,7 +105,6 @@ bool PacketReceiver::registerMessageListener(PacketType type, QObject* listener,
// add the mapping // add the mapping
_packetListListenerMap[type] = ObjectMethodPair(QPointer<QObject>(listener), matchingMethod); _packetListListenerMap[type] = ObjectMethodPair(QPointer<QObject>(listener), matchingMethod);
_packetListenerLock.unlock();
return true; return true;
} else { } else {
return false; return false;
@ -244,7 +244,7 @@ void PacketReceiver::handleVerifiedPacketList(std::unique_ptr<udt::PacketList> p
} }
} }
_packetListenerLock.lock(); QMutexLocker packetListenerLocker(&_packetListenerLock);
bool listenerIsDead = false; bool listenerIsDead = false;
@ -258,13 +258,13 @@ void PacketReceiver::handleVerifiedPacketList(std::unique_ptr<udt::PacketList> p
bool success = false; bool success = false;
Qt::ConnectionType connectionType;
// check if this is a directly connected listener // check if this is a directly connected listener
_directConnectSetMutex.lock(); {
QMutexLocker directConnectLocker(&_directConnectSetMutex);
Qt::ConnectionType connectionType =
_directlyConnectedObjects.contains(listener.first) ? Qt::DirectConnection : Qt::AutoConnection; connectionType = _directlyConnectedObjects.contains(listener.first) ? Qt::DirectConnection : Qt::AutoConnection;
}
_directConnectSetMutex.unlock();
PacketType packetType = nlPacketList->getType(); PacketType packetType = nlPacketList->getType();
@ -329,9 +329,10 @@ void PacketReceiver::handleVerifiedPacketList(std::unique_ptr<udt::PacketList> p
it = _packetListListenerMap.erase(it); it = _packetListListenerMap.erase(it);
// if it exists, remove the listener from _directlyConnectedObjects // if it exists, remove the listener from _directlyConnectedObjects
_directConnectSetMutex.lock(); {
_directlyConnectedObjects.remove(listener.first); QMutexLocker directConnectLocker(&_directConnectSetMutex);
_directConnectSetMutex.unlock(); _directlyConnectedObjects.remove(listener.first);
}
} }
} else if (it == _packetListListenerMap.end()) { } else if (it == _packetListListenerMap.end()) {
@ -340,8 +341,6 @@ void PacketReceiver::handleVerifiedPacketList(std::unique_ptr<udt::PacketList> p
// insert a dummy listener so we don't print this again // insert a dummy listener so we don't print this again
_packetListListenerMap.insert(nlPacketList->getType(), { nullptr, QMetaMethod() }); _packetListListenerMap.insert(nlPacketList->getType(), { nullptr, QMetaMethod() });
} }
_packetListenerLock.unlock();
} }
void PacketReceiver::handleVerifiedPacket(std::unique_ptr<udt::Packet> packet) { void PacketReceiver::handleVerifiedPacket(std::unique_ptr<udt::Packet> packet) {