diff options
author | rubidium <rubidium@openttd.org> | 2009-04-10 20:18:48 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2009-04-10 20:18:48 +0000 |
commit | 2663ad302f366ecd2498a43470855c4cf73839d6 (patch) | |
tree | a6e4b4d85cbe3a6448e01b6ffc8ba0e9efe25b56 /src/network/network_udp.cpp | |
parent | 238742ee036f483f12a84ba7033fc8ef67506201 (diff) | |
download | openttd-2663ad302f366ecd2498a43470855c4cf73839d6.tar.xz |
(svn r16022) -Fix (r15159): sometimes the unregister "query" thread could be delayed so much that the network stuff was already closed and the packet would never reach the master server causing the server to appear online longer than necessary.
Diffstat (limited to 'src/network/network_udp.cpp')
-rw-r--r-- | src/network/network_udp.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/network/network_udp.cpp b/src/network/network_udp.cpp index 74c732710..efb8883be 100644 --- a/src/network/network_udp.cpp +++ b/src/network/network_udp.cpp @@ -58,7 +58,7 @@ DEF_UDP_RECEIVE_COMMAND(Master, PACKET_UDP_MASTER_ACK_REGISTER) DEBUG(net, 2, "[udp] advertising on master server successful"); /* We are advertised, but we don't want to! */ - if (!_settings_client.network.server_advertise) NetworkUDPRemoveAdvertise(); + if (!_settings_client.network.server_advertise) NetworkUDPRemoveAdvertise(false); } DEF_UDP_RECEIVE_COMMAND(Master, PACKET_UDP_MASTER_SESSION_KEY) @@ -474,13 +474,16 @@ void NetworkUDPRemoveAdvertiseThread(void *pntr) _network_udp_mutex->EndCritical(); } -/* Remove our advertise from the master-server */ -void NetworkUDPRemoveAdvertise() +/** + * Remove our advertise from the master-server. + * @param blocking whether to wait until the removal has finished. + */ +void NetworkUDPRemoveAdvertise(bool blocking) { /* Check if we are advertising */ if (!_networking || !_network_server || !_network_udp_server) return; - if (!ThreadObject::New(NetworkUDPRemoveAdvertiseThread, NULL)) { + if (blocking || !ThreadObject::New(NetworkUDPRemoveAdvertiseThread, NULL)) { NetworkUDPRemoveAdvertiseThread(NULL); } } |