diff options
| author | Machiavelli <machiavelli.trinity@gmail.com> | 2011-01-16 00:08:52 +0100 |
|---|---|---|
| committer | Machiavelli <machiavelli.trinity@gmail.com> | 2011-01-16 00:08:52 +0100 |
| commit | 52cd2cbd7eb62648ae13f600c125116e8cdfc89d (patch) | |
| tree | decb09f8360ccfcb17c5d436a33b0dd7af4d274e /src/server/worldserver | |
| parent | 58564cc496d675372d4a9062b463bdbc338f50cc (diff) | |
Core/Maps: Unload transports in MapManager::UnloadAll instead of singleton destructor.
Core/Transports: Properly delink units from transports on transport desutruction. - Thanks to Shauren for help.
Core/ObjectAccessor: Unload corpse 'storage' in added UnloadAll method called in WorldRunnable postservice hook.
Core/Master: Change some postservice queries to syncrhonous (direct) execution to ensure execution on shutdown
Core/Master: Remove redundant calls to ACE::init and ACE::fini
These changes were made to fix crash/freeze issues on shutdown.
Diffstat (limited to 'src/server/worldserver')
| -rwxr-xr-x | src/server/worldserver/Main.cpp | 4 | ||||
| -rwxr-xr-x | src/server/worldserver/Master.cpp | 10 | ||||
| -rwxr-xr-x | src/server/worldserver/WorldThread/WorldRunnable.cpp | 2 |
3 files changed, 6 insertions, 10 deletions
diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp index bc861e6b039..10b7e00aa99 100755 --- a/src/server/worldserver/Main.cpp +++ b/src/server/worldserver/Main.cpp @@ -72,8 +72,6 @@ void usage(const char *prog) /// Launch the Trinity server extern int main(int argc, char **argv) { - ACE::init(); - ///- Command line parsing to get the configuration file name char const* cfg_file = _TRINITY_CORE_CONFIG; int c=1; @@ -151,8 +149,6 @@ extern int main(int argc, char **argv) // 1 - shutdown at error // 2 - restart command used, this code can be used by restarter for restart Trinityd - ACE::fini(); - return ret; } diff --git a/src/server/worldserver/Master.cpp b/src/server/worldserver/Master.cpp index 7dd4c1fa930..b4d9fa7eb7c 100755 --- a/src/server/worldserver/Master.cpp +++ b/src/server/worldserver/Master.cpp @@ -174,7 +174,7 @@ int Master::Run() CoredSignalHandler SignalBREAK; #endif /* _WIN32 */ - // Register realmd's signal handlers + // Register core's signal handlers ACE_Sig_Handler Handler; Handler.register_handler(SIGINT, &SignalINT); Handler.register_handler(SIGTERM, &SignalTERM); @@ -290,7 +290,7 @@ int Master::Run() } // set server offline - LoginDatabase.PExecute("UPDATE realmlist SET color = color | %u WHERE id = '%d'", REALM_FLAG_OFFLINE, realmID); + LoginDatabase.DirectPExecute("UPDATE realmlist SET color = color | %u WHERE id = '%d'", REALM_FLAG_OFFLINE, realmID); // when the main thread closes the singletons get unloaded // since worldrunnable uses them, it will crash if unloaded after master @@ -484,12 +484,12 @@ void Master::clearOnlineAccounts() { // Cleanup online status for characters hosted at current realm /// \todo Only accounts with characters logged on *this* realm should have online status reset. Move the online column from 'account' to 'realmcharacters'? - LoginDatabase.PExecute( + LoginDatabase.DirectPExecute( "UPDATE account SET online = 0 WHERE online > 0 " "AND id IN (SELECT acctid FROM realmcharacters WHERE realmid = '%d')",realmID); - CharacterDatabase.Execute("UPDATE characters SET online = 0 WHERE online<>0"); + CharacterDatabase.DirectExecute("UPDATE characters SET online = 0 WHERE online<>0"); // Battleground instance ids reset at server restart - CharacterDatabase.Execute("UPDATE character_battleground_data SET instance_id = 0"); + CharacterDatabase.DirectExecute("UPDATE character_battleground_data SET instance_id = 0"); } diff --git a/src/server/worldserver/WorldThread/WorldRunnable.cpp b/src/server/worldserver/WorldThread/WorldRunnable.cpp index df07a4e3bf0..acf71223791 100755 --- a/src/server/worldserver/WorldThread/WorldRunnable.cpp +++ b/src/server/worldserver/WorldThread/WorldRunnable.cpp @@ -90,6 +90,6 @@ void WorldRunnable::run() sWorldSocketMgr->StopNetwork(); + sObjectAccessor->UnloadAll(); // unload 'i_player2corpse' storage and remove from world sMapMgr->UnloadAll(); // unload all grids (including locked in memory) - } |
