From 0793b3bc114d8959f26a46217925a572796687e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Fri, 11 Nov 2016 18:27:40 +0100 Subject: [PATCH 1/2] Fix #4755: Crash loading new map while running a server --- src/network/network.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/network/network.cpp b/src/network/network.cpp index 6d334e1464..cae3a9427d 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -927,7 +927,13 @@ void Network::Server_Send_MAP(NetworkConnection* connection) SDL_RWops* rw = SDL_RWFromFP(temp, SDL_TRUE); size_t out_size; unsigned char *header; - header = save_for_network(rw, out_size, connection->RequestedObjects); + std::vector objects; + if (connection) { + objects = connection->RequestedObjects; + } else { + objects = scenario_get_packable_objects(); + } + header = save_for_network(rw, out_size, objects); SDL_RWclose(rw); if (header == nullptr) { connection->SetLastDisconnectReason(STR_MULTIPLAYER_CONNECTION_CLOSED); From b30454366f49c635972ea078504d80f7c27f0419 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Fri, 11 Nov 2016 18:38:23 +0100 Subject: [PATCH 2/2] Add note about possible improvement of object sending [ci skip] --- src/network/network.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/network/network.cpp b/src/network/network.cpp index cae3a9427d..3136d649ce 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -931,13 +931,17 @@ void Network::Server_Send_MAP(NetworkConnection* connection) if (connection) { objects = connection->RequestedObjects; } else { + // This will send all custom objects to connected clients + // TODO: fix it so custom objects negotiation is performed even in this case. objects = scenario_get_packable_objects(); } header = save_for_network(rw, out_size, objects); SDL_RWclose(rw); if (header == nullptr) { - connection->SetLastDisconnectReason(STR_MULTIPLAYER_CONNECTION_CLOSED); - connection->Socket->Disconnect(); + if (connection) { + connection->SetLastDisconnectReason(STR_MULTIPLAYER_CONNECTION_CLOSED); + connection->Socket->Disconnect(); + } return; } size_t chunksize = 65000;