From 16ded532c89a8913c198df62a60ffc4a03229bd3 Mon Sep 17 00:00:00 2001 From: skyjake Date: Tue, 23 Jul 2013 08:20:52 +0300 Subject: [PATCH] Fixed|ServerApp: Managing World audiences at shutdown (ShellUsers) ShellUsers was trying to remove its World observer after World had already been destroyed. --- doomsday/server/src/serversystem.cpp | 5 +++++ doomsday/server/src/shellusers.cpp | 4 ---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/doomsday/server/src/serversystem.cpp b/doomsday/server/src/serversystem.cpp index 6350ddaad9..5f839617b1 100644 --- a/doomsday/server/src/serversystem.cpp +++ b/doomsday/server/src/serversystem.cpp @@ -89,6 +89,9 @@ DENG2_PIMPL(ServerSystem) // Update the beacon with the new port. beacon.start(port); + + App_World().audienceForMapChange += shellUsers; + return true; } @@ -104,6 +107,8 @@ DENG2_PIMPL(ServerSystem) void deinit() { + App_World().audienceForMapChange -= shellUsers; + beacon.stop(); // Close the listening socket. diff --git a/doomsday/server/src/shellusers.cpp b/doomsday/server/src/shellusers.cpp index ab4381f5f8..605177782a 100644 --- a/doomsday/server/src/shellusers.cpp +++ b/doomsday/server/src/shellusers.cpp @@ -42,8 +42,6 @@ DENG2_PIMPL_NOREF(ShellUsers) ShellUsers::ShellUsers() : d(new Instance) { - App_World().audienceForMapChange += this; - // Player information is sent periodically to all shell users. connect(d->infoTimer, SIGNAL(timeout()), this, SLOT(sendPlayerInfoToAll())); d->infoTimer->start(); @@ -53,8 +51,6 @@ ShellUsers::~ShellUsers() { d->infoTimer->stop(); - App_World().audienceForMapChange -= this; - foreach(ShellUser *user, d->users) { delete user;