repairs for dead listener checks

This commit is contained in:
Stephen Birarda 2015-07-24 16:17:06 -07:00
parent f4ade0ee8e
commit 47a05bd3ec

View file

@ -230,7 +230,7 @@ void PacketReceiver::handleVerifiedPacket(std::unique_ptr<udt::Packet> packet) {
auto listener = it.value(); auto listener = it.value();
if (listener.first && it->second.isValid()) { if (listener.first) {
bool success = false; bool success = false;
@ -273,12 +273,21 @@ void PacketReceiver::handleVerifiedPacket(std::unique_ptr<udt::Packet> packet) {
Q_ARG(QSharedPointer<NLPacket>, Q_ARG(QSharedPointer<NLPacket>,
QSharedPointer<NLPacket>(nlPacket.release()))); QSharedPointer<NLPacket>(nlPacket.release())));
} }
} else {
listenerIsDead = true;
} }
} else { } else {
emit dataReceived(NodeType::Unassigned, nlPacket->getDataSize()); emit dataReceived(NodeType::Unassigned, nlPacket->getDataSize());
success = listener.second.invoke(listener.first, // one final check on the QPointer before we invoke
Q_ARG(QSharedPointer<NLPacket>, QSharedPointer<NLPacket>(nlPacket.release()))); if (listener.first) {
success = listener.second.invoke(listener.first,
Q_ARG(QSharedPointer<NLPacket>,
QSharedPointer<NLPacket>(nlPacket.release())));
} else {
listenerIsDead = true;
}
} }
if (!success) { if (!success) {