Network: Fix locking issues around server map PacketWriter

pull/175/head
Jonathan G Rennison 4 years ago
parent 197a4f2e3e
commit caa27cfa39

@ -127,6 +127,8 @@ struct PacketWriter : SaveFilter {
*/
bool HasPackets()
{
std::lock_guard<std::mutex> lock(this->mutex);
return this->packets != nullptr;
}
@ -138,6 +140,7 @@ struct PacketWriter : SaveFilter {
std::lock_guard<std::mutex> 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 */

Loading…
Cancel
Save