summaryrefslogtreecommitdiff
path: root/src/network/network_server.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/network/network_server.cpp')
-rw-r--r--src/network/network_server.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp
index be27d75a6..ffd295008 100644
--- a/src/network/network_server.cpp
+++ b/src/network/network_server.cpp
@@ -69,7 +69,6 @@ struct PacketWriter : SaveFilter {
/** Make sure everything is cleaned up. */
~PacketWriter()
{
-
/* Prevent double frees. */
if (this->cs != NULL) {
if (this->cs->savegame_mutex != NULL) this->cs->savegame_mutex->BeginCritical();
@@ -99,7 +98,8 @@ struct PacketWriter : SaveFilter {
/* virtual */ void Write(byte *buf, size_t size)
{
- if (this->cs == NULL) return;
+ /* We want to abort the saving when the socket is closed. */
+ if (this->cs == NULL) SlError(STR_NETWORK_ERROR_LOSTCONNECTION);
if (this->current == NULL) this->current = new Packet(PACKET_SERVER_MAP_DATA);
@@ -125,7 +125,8 @@ struct PacketWriter : SaveFilter {
/* virtual */ void Finish()
{
- if (this->cs == NULL) return;
+ /* We want to abort the saving when the socket is closed. */
+ if (this->cs == NULL) SlError(STR_NETWORK_ERROR_LOSTCONNECTION);
if (this->cs->savegame_mutex != NULL) this->cs->savegame_mutex->BeginCritical();
@@ -181,6 +182,10 @@ ServerNetworkGameSocketHandler::~ServerNetworkGameSocketHandler()
if (this->savegame != NULL) this->savegame->cs = NULL;
if (this->savegame_mutex != NULL) this->savegame_mutex->EndCritical();
+
+ /* Make sure the saving is completely cancelled. */
+ if (this->savegame != NULL) WaitTillSaved();
+
delete this->savegame_mutex;
}