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,12 +193,17 @@ void Connection::queueReceivedMessagePacket(std::unique_ptr<Packet> packet) {
while (pendingMessage.hasAvailablePackets()) { while (pendingMessage.hasAvailablePackets()) {
auto packet = pendingMessage.removeNextPacket(); auto packet = pendingMessage.removeNextPacket();
_parentSocket->messageReceived(std::move(packet));
}
if (pendingMessage.isComplete()) { 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); _pendingReceivedMessages.erase(messageNumber);
} }
}
} }
void Connection::sync() { void Connection::sync() {

View file

@ -37,7 +37,6 @@ class Socket;
class PendingReceivedMessage { class PendingReceivedMessage {
public: public:
void enqueuePacket(std::unique_ptr<Packet> packet); void enqueuePacket(std::unique_ptr<Packet> packet);
bool isComplete() const { return _hasLastPacket && _numPackets == _packets.size(); }
bool hasAvailablePackets() const; bool hasAvailablePackets() const;
std::unique_ptr<Packet> removeNextPacket(); 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, SendQueue::SendQueue(Socket* socket, HifiSockAddr dest, SequenceNumber currentSequenceNumber,
MessageNumber currentMessageNumber, bool hasReceivedHandshakeACK) : MessageNumber currentMessageNumber, bool hasReceivedHandshakeACK) :
_packets(currentMessageNumber),
_socket(socket), _socket(socket),
_destination(dest), _destination(dest)
_packets(currentMessageNumber)
{ {
// set our member variables from current sequence number // set our member variables from current sequence number
_currentSequenceNumber = currentSequenceNumber; _currentSequenceNumber = currentSequenceNumber;