[8825] At fail start db connections stop all started db connection threads.

This will restore state before start Db function call and prevent crashes
at delayed access to log singleton in case outdated DB structure detection.
This commit is contained in:
VladimirMangos 2009-11-17 12:38:13 +03:00
parent 55e715dddd
commit bc5fb40867
3 changed files with 39 additions and 1 deletions

View file

@ -414,12 +414,19 @@ bool Master::_StartDB()
}
if(!WorldDatabase.CheckRequiredField("db_version",REVISION_DB_MANGOS))
{
///- Wait for already started DB delay threads to end
WorldDatabase.HaltDelayThread();
return false;
}
dbstring = sConfig.GetStringDefault("CharacterDatabaseInfo", "");
if(dbstring.empty())
{
sLog.outError("Character Database not specified in configuration file");
///- Wait for already started DB delay threads to end
WorldDatabase.HaltDelayThread();
return false;
}
sLog.outString("Character Database: %s", dbstring.c_str());
@ -428,17 +435,29 @@ bool Master::_StartDB()
if(!CharacterDatabase.Initialize(dbstring.c_str()))
{
sLog.outError("Cannot connect to Character database %s",dbstring.c_str());
///- Wait for already started DB delay threads to end
WorldDatabase.HaltDelayThread();
return false;
}
if(!CharacterDatabase.CheckRequiredField("character_db_version",REVISION_DB_CHARACTERS))
{
///- Wait for already started DB delay threads to end
WorldDatabase.HaltDelayThread();
CharacterDatabase.HaltDelayThread();
return false;
}
///- Get login database info from configuration file
dbstring = sConfig.GetStringDefault("LoginDatabaseInfo", "");
if(dbstring.empty())
{
sLog.outError("Login database not specified in configuration file");
///- Wait for already started DB delay threads to end
WorldDatabase.HaltDelayThread();
CharacterDatabase.HaltDelayThread();
return false;
}
@ -447,17 +466,32 @@ bool Master::_StartDB()
if(!loginDatabase.Initialize(dbstring.c_str()))
{
sLog.outError("Cannot connect to login database %s",dbstring.c_str());
///- Wait for already started DB delay threads to end
WorldDatabase.HaltDelayThread();
CharacterDatabase.HaltDelayThread();
return false;
}
if(!loginDatabase.CheckRequiredField("realmd_db_version",REVISION_DB_REALMD))
{
///- Wait for already started DB delay threads to end
WorldDatabase.HaltDelayThread();
CharacterDatabase.HaltDelayThread();
loginDatabase.HaltDelayThread();
return false;
}
///- Get the realm Id from the configuration file
realmID = sConfig.GetIntDefault("RealmID", 0);
if(!realmID)
{
sLog.outError("Realm ID not defined in configuration file");
///- Wait for already started DB delay threads to end
WorldDatabase.HaltDelayThread();
CharacterDatabase.HaltDelayThread();
loginDatabase.HaltDelayThread();
return false;
}