diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 0012864728..a5533604a1 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -127,6 +127,8 @@ struct PacketWriter : SaveFilter { */ bool HasPackets() { + std::lock_guard lock(this->mutex); + return this->packets != nullptr; } @@ -138,6 +140,7 @@ struct PacketWriter : SaveFilter { std::lock_guard lock(this->mutex); Packet *p = this->packets; + if (p == nullptr) return nullptr; this->packets = p->next; p->next = nullptr; @@ -621,10 +624,14 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMap() if (this->status == STATUS_MAP) { bool last_packet = false; - bool has_packets = false; + bool has_packets = true; - for (uint i = 0; (has_packets = this->savegame->HasPackets()) && i < sent_packets; i++) { + for (uint i = 0; i < sent_packets; i++) { Packet *p = this->savegame->PopPacket(); + if (p == nullptr) { + has_packets = false; + break; + } last_packet = p->buffer[2] == PACKET_SERVER_MAP_DONE; this->SendPacket(p); @@ -634,6 +641,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMap() break; } } + if (has_packets) has_packets = this->savegame->HasPackets(); if (last_packet) { /* Done reading, make sure saving is done as well */