fix message erase in conn, SendQueue ctor order

This commit is contained in:
Stephen Birarda 2017-12-14 12:07:32 -08:00
parent 34c1c27455
commit cf28fdf188
3 changed files with 11 additions and 7 deletions

View file

@ -193,11 +193,16 @@ void Connection::queueReceivedMessagePacket(std::unique_ptr<Packet> packet) {
while (pendingMessage.hasAvailablePackets()) {
auto packet = pendingMessage.removeNextPacket();
_parentSocket->messageReceived(std::move(packet));
}
if (pendingMessage.isComplete()) {
_pendingReceivedMessages.erase(messageNumber);
auto packetPosition = packet->getPacketPosition();
_parentSocket->messageReceived(std::move(packet));
// if this was the last or only packet, then we can remove the pending message from our hash
if (packetPosition == Packet::PacketPosition::LAST ||
packetPosition == Packet::PacketPosition::ONLY) {
_pendingReceivedMessages.erase(messageNumber);
}
}
}

View file

@ -37,7 +37,6 @@ class Socket;
class PendingReceivedMessage {
public:
void enqueuePacket(std::unique_ptr<Packet> packet);
bool isComplete() const { return _hasLastPacket && _numPackets == _packets.size(); }
bool hasAvailablePackets() const;
std::unique_ptr<Packet> removeNextPacket();

View file

@ -87,9 +87,9 @@ std::unique_ptr<SendQueue> SendQueue::create(Socket* socket, HifiSockAddr destin
SendQueue::SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber,
MessageNumber currentMessageNumber, bool hasReceivedHandshakeACK) :
_packets(currentMessageNumber),
_socket(socket),
_destination(dest),
_packets(currentMessageNumber)
_destination(dest)
{
// set our member variables from current sequence number
_currentSequenceNumber = currentSequenceNumber;