Follow-up fixes to database conf reading (bug 4286, r=fyren).
This commit is contained in:
parent
b4a0d7a5b7
commit
b1ef86de75
@ -104,6 +104,7 @@ void DBManager::OnSourceModShutdown()
|
|||||||
m_pQueueLock->DestroyThis();
|
m_pQueueLock->DestroyThis();
|
||||||
g_HandleSys.RemoveType(m_DatabaseType, g_pCoreIdent);
|
g_HandleSys.RemoveType(m_DatabaseType, g_pCoreIdent);
|
||||||
g_HandleSys.RemoveType(m_DriverType, g_pCoreIdent);
|
g_HandleSys.RemoveType(m_DriverType, g_pCoreIdent);
|
||||||
|
ClearConfigs();
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int DBManager::GetInterfaceVersion()
|
unsigned int DBManager::GetInterfaceVersion()
|
||||||
@ -133,12 +134,20 @@ void DBManager::OnHandleDestroy(HandleType_t type, void *object)
|
|||||||
|
|
||||||
void DBManager::ReadSMC_ParseStart()
|
void DBManager::ReadSMC_ParseStart()
|
||||||
{
|
{
|
||||||
m_confs.clear();
|
ClearConfigs();
|
||||||
m_ParseLevel = 0;
|
m_ParseLevel = 0;
|
||||||
m_ParseState = DBPARSE_LEVEL_NONE;
|
m_ParseState = DBPARSE_LEVEL_NONE;
|
||||||
m_DefDriver.clear();
|
m_DefDriver.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DBManager::ClearConfigs()
|
||||||
|
{
|
||||||
|
List<ConfDbInfo *>::iterator iter;
|
||||||
|
for (iter=m_confs.begin(); iter!=m_confs.end(); iter++)
|
||||||
|
delete (*iter);
|
||||||
|
m_confs.clear();
|
||||||
|
}
|
||||||
|
|
||||||
ConfDbInfo s_CurInfo;
|
ConfDbInfo s_CurInfo;
|
||||||
SMCResult DBManager::ReadSMC_NewSection(const SMCStates *states, const char *name)
|
SMCResult DBManager::ReadSMC_NewSection(const SMCStates *states, const char *name)
|
||||||
{
|
{
|
||||||
@ -205,13 +214,6 @@ SMCResult DBManager::ReadSMC_KeyValue(const SMCStates *states, const char *key,
|
|||||||
return SMCResult_Continue;
|
return SMCResult_Continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ASSIGN_VAR(var) \
|
|
||||||
if (s_CurInfo.var == "") { \
|
|
||||||
s_CurInfo.info.var = ""; \
|
|
||||||
} else { \
|
|
||||||
s_CurInfo.info.var = s_CurInfo.var.c_str(); \
|
|
||||||
}
|
|
||||||
|
|
||||||
SMCResult DBManager::ReadSMC_LeavingSection(const SMCStates *states)
|
SMCResult DBManager::ReadSMC_LeavingSection(const SMCStates *states)
|
||||||
{
|
{
|
||||||
if (m_ParseLevel)
|
if (m_ParseLevel)
|
||||||
@ -222,17 +224,26 @@ SMCResult DBManager::ReadSMC_LeavingSection(const SMCStates *states)
|
|||||||
|
|
||||||
if (m_ParseState == DBPARSE_LEVEL_DATABASE)
|
if (m_ParseState == DBPARSE_LEVEL_DATABASE)
|
||||||
{
|
{
|
||||||
/* Set all of the info members to either a blank string
|
ConfDbInfo *cdb = new ConfDbInfo();
|
||||||
* or the string pointer from the string table.
|
|
||||||
*/
|
cdb->name = s_CurInfo.name;
|
||||||
ASSIGN_VAR(driver);
|
cdb->driver = s_CurInfo.driver;
|
||||||
ASSIGN_VAR(database);
|
cdb->host = s_CurInfo.host;
|
||||||
ASSIGN_VAR(host);
|
cdb->user = s_CurInfo.user;
|
||||||
ASSIGN_VAR(user);
|
cdb->pass = s_CurInfo.pass;
|
||||||
ASSIGN_VAR(pass);
|
cdb->database = s_CurInfo.database;
|
||||||
|
cdb->realDriver = s_CurInfo.realDriver;
|
||||||
|
cdb->info.maxTimeout = s_CurInfo.info.maxTimeout;
|
||||||
|
cdb->info.port = s_CurInfo.info.port;
|
||||||
|
|
||||||
|
cdb->info.driver = cdb->driver.c_str();
|
||||||
|
cdb->info.database = cdb->database.c_str();
|
||||||
|
cdb->info.host = cdb->host.c_str();
|
||||||
|
cdb->info.user = cdb->user.c_str();
|
||||||
|
cdb->info.pass = cdb->pass.c_str();
|
||||||
|
|
||||||
/* Save it.. */
|
/* Save it.. */
|
||||||
m_confs.push_back(s_CurInfo);
|
m_confs.push_back(cdb);
|
||||||
|
|
||||||
/* Go up one level */
|
/* Go up one level */
|
||||||
m_ParseState = DBPARSE_LEVEL_MAIN;
|
m_ParseState = DBPARSE_LEVEL_MAIN;
|
||||||
@ -243,7 +254,6 @@ SMCResult DBManager::ReadSMC_LeavingSection(const SMCStates *states)
|
|||||||
|
|
||||||
return SMCResult_Continue;
|
return SMCResult_Continue;
|
||||||
}
|
}
|
||||||
#undef ASSIGN_VAR
|
|
||||||
|
|
||||||
void DBManager::ReadSMC_ParseEnd(bool halted, bool failed)
|
void DBManager::ReadSMC_ParseEnd(bool halted, bool failed)
|
||||||
{
|
{
|
||||||
@ -332,10 +342,10 @@ void DBManager::RemoveDriver(IDBDriver *pDriver)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Make sure NOTHING references this! */
|
/* Make sure NOTHING references this! */
|
||||||
List<ConfDbInfo>::iterator iter;
|
List<ConfDbInfo *>::iterator iter;
|
||||||
for (iter=m_confs.begin(); iter!=m_confs.end(); iter++)
|
for (iter=m_confs.begin(); iter!=m_confs.end(); iter++)
|
||||||
{
|
{
|
||||||
ConfDbInfo &db = (*iter);
|
ConfDbInfo &db = *(*iter);
|
||||||
if (db.realDriver == pDriver)
|
if (db.realDriver == pDriver)
|
||||||
{
|
{
|
||||||
db.realDriver = NULL;
|
db.realDriver = NULL;
|
||||||
@ -447,11 +457,11 @@ const DatabaseInfo *DBManager::FindDatabaseConf(const char *name)
|
|||||||
|
|
||||||
ConfDbInfo *DBManager::GetDatabaseConf(const char *name)
|
ConfDbInfo *DBManager::GetDatabaseConf(const char *name)
|
||||||
{
|
{
|
||||||
List<ConfDbInfo>::iterator iter;
|
List<ConfDbInfo *>::iterator iter;
|
||||||
|
|
||||||
for (iter=m_confs.begin(); iter!=m_confs.end(); iter++)
|
for (iter=m_confs.begin(); iter!=m_confs.end(); iter++)
|
||||||
{
|
{
|
||||||
ConfDbInfo &conf = (*iter);
|
ConfDbInfo &conf = *(*iter);
|
||||||
if (conf.name == name)
|
if (conf.name == name)
|
||||||
{
|
{
|
||||||
return &conf;
|
return &conf;
|
||||||
|
@ -120,6 +120,7 @@ public:
|
|||||||
return m_DatabaseType;
|
return m_DatabaseType;
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
|
void ClearConfigs();
|
||||||
void KillWorkerThread();
|
void KillWorkerThread();
|
||||||
private:
|
private:
|
||||||
CVector<IDBDriver *> m_drivers;
|
CVector<IDBDriver *> m_drivers;
|
||||||
@ -133,7 +134,7 @@ private:
|
|||||||
IMutex *m_pQueueLock; /* Queue safety lock */
|
IMutex *m_pQueueLock; /* Queue safety lock */
|
||||||
IMutex *m_pThinkLock; /* Think-queue lock */
|
IMutex *m_pThinkLock; /* Think-queue lock */
|
||||||
|
|
||||||
List<ConfDbInfo> m_confs;
|
List<ConfDbInfo *> m_confs;
|
||||||
HandleType_t m_DriverType;
|
HandleType_t m_DriverType;
|
||||||
HandleType_t m_DatabaseType;
|
HandleType_t m_DatabaseType;
|
||||||
String m_DefDriver;
|
String m_DefDriver;
|
||||||
|
Loading…
Reference in New Issue
Block a user