diff options
author | Jonathan G Rennison <j.g.rennison@gmail.com> | 2020-05-06 23:23:03 +0100 |
---|---|---|
committer | Charles Pigott <charlespigott@googlemail.com> | 2020-06-21 11:47:56 +0100 |
commit | 1ac0d4a5b2c8f5e5c9a4629091c81e3f41a4c126 (patch) | |
tree | b6dddcdb1a067ca901e67d0ec126ad34aa3a37c5 /src/network/core/udp.cpp | |
parent | 9aca6ff971e95fbeaff9302cf5d8d44a80ed0206 (diff) | |
download | openttd-1ac0d4a5b2c8f5e5c9a4629091c81e3f41a4c126.tar.xz |
Fix: Thread unsafe use of NetworkAddress::GetAddressAsString
Remove static buffer form of NetworkAddress::GetAddressAsString.
This is used in multiple threads concurrently, and is not thread-safe.
Replace it with a form returning std::string.
Diffstat (limited to 'src/network/core/udp.cpp')
-rw-r--r-- | src/network/core/udp.cpp | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/network/core/udp.cpp b/src/network/core/udp.cpp index 123683873..57352412b 100644 --- a/src/network/core/udp.cpp +++ b/src/network/core/udp.cpp @@ -100,10 +100,10 @@ void NetworkUDPSocketHandler::SendPacket(Packet *p, NetworkAddress *recv, bool a /* Send the buffer */ int res = sendto(s.second, (const char*)p->buffer, p->size, 0, (const struct sockaddr *)send.GetAddress(), send.GetAddressLength()); - DEBUG(net, 7, "[udp] sendto(%s)", send.GetAddressAsString()); + DEBUG(net, 7, "[udp] sendto(%s)", send.GetAddressAsString().c_str()); /* Check for any errors, but ignore it otherwise */ - if (res == -1) DEBUG(net, 1, "[udp] sendto(%s) failed with: %i", send.GetAddressAsString(), GET_LAST_ERROR()); + if (res == -1) DEBUG(net, 1, "[udp] sendto(%s) failed with: %i", send.GetAddressAsString().c_str(), GET_LAST_ERROR()); if (!all) break; } @@ -136,7 +136,7 @@ void NetworkUDPSocketHandler::ReceivePackets() /* If the size does not match the packet must be corrupted. * Otherwise it will be marked as corrupted later on. */ if (nbytes != p.size) { - DEBUG(net, 1, "received a packet with mismatching size from %s", address.GetAddressAsString()); + DEBUG(net, 1, "received a packet with mismatching size from %s", address.GetAddressAsString().c_str()); continue; } @@ -313,9 +313,9 @@ void NetworkUDPSocketHandler::HandleUDPPacket(Packet *p, NetworkAddress *client_ default: if (this->HasClientQuit()) { - DEBUG(net, 0, "[udp] received invalid packet type %d from %s", type, client_addr->GetAddressAsString()); + DEBUG(net, 0, "[udp] received invalid packet type %d from %s", type, client_addr->GetAddressAsString().c_str()); } else { - DEBUG(net, 0, "[udp] received illegal packet from %s", client_addr->GetAddressAsString()); + DEBUG(net, 0, "[udp] received illegal packet from %s", client_addr->GetAddressAsString().c_str()); } break; } @@ -328,7 +328,7 @@ void NetworkUDPSocketHandler::HandleUDPPacket(Packet *p, NetworkAddress *client_ */ void NetworkUDPSocketHandler::ReceiveInvalidPacket(PacketUDPType type, NetworkAddress *client_addr) { - DEBUG(net, 0, "[udp] received packet type %d on wrong port from %s", type, client_addr->GetAddressAsString()); + DEBUG(net, 0, "[udp] received packet type %d on wrong port from %s", type, client_addr->GetAddressAsString().c_str()); } void NetworkUDPSocketHandler::Receive_CLIENT_FIND_SERVER(Packet *p, NetworkAddress *client_addr) { this->ReceiveInvalidPacket(PACKET_UDP_CLIENT_FIND_SERVER, client_addr); } |