[prev in list] [next in list] [prev in thread] [next in thread]
List: helix-server-cvs
Subject: [Server-cvs] log/tmplgpln tmplgpln.cpp, 1.24, 1.24.20.1 tmplgpln.h, 1.19, 1.19.36.1
From: yijil () helixcommunity ! org
Date: 2013-03-25 10:42:09
[Download RAW message or body]
Update of /cvsroot/server/log/tmplgpln
In directory cvs01.internal.helixcommunity.org:/tmp/cvs-serv15609/server/log/tmplgpln
Modified Files:
Tag: SERVER_VHOST_YIJI_2
tmplgpln.cpp tmplgpln.h
Log Message:
Committed to: SERVER_VHOST_YIJI_2
Reviewed by: Xiaocheng
Synopsis
========
Configure file and Error log(including updates for common part) for vhost support
Branches: SERVER_VHOST_YIJI_2
Reviewer: Anyone
Description
===========
I. Configuration
In current server design, when server starts, it will load rmserver.cfg file, and \
save it to our server registry. In registry, every item in rmserver.cfg will under \
root config, when any updates from admin page, it will cause items bellow config be \
write back it rmserver.cfg.
In the version for vhost, there exists one configure file for every account. We put \
every configure file data of different vhost (for example Account) under \
vhost.Account in registry.
Use a map to manage multiple vhost configure file, it will have interfaces to \
search/save XMLConfig object by account name.
II. Error log
In version supporting vhost, it needs to separate logs according to vhost account.
Add a new interface "IHXErrorMessage2" for saving vhost log. When other parts want to \
save vhost error log, they don`t need to change other parts, only need query \
interface IHXErrorMessage2 and call IHXErrorMessage2::ReportByVhost().
There CR also include delete or add vhost account.
III. Files Affected
==============
common/include/hxiids.h
common/include/hxerror.h
common/include/hxcfg.h
server/engine/core/proc_container.cpp
server/engine/core/server_context.cpp
server/engine/core/pub/error_sink_handler.h
server/engine/core/pub/proc_container.h
server/engine/context/errhand.cpp
server/engine/context/pub/errhand.h
server/engine/context/pub/error_sink_ctrl.h
server/engine/config/config.cpp
server/engine/config/xmlregconfig.cpp
server/engine/config/pub/xmlregconfig.h
server/log/tmplgpln/base_log.cpp
server/log/tmplgpln/base_log.h
server/log/tmplgpln/error_log.cpp
server/log/tmplgpln/error_log.h
server/log/tmplgpln/tmplgpln.cpp
server/log/tmplgpln/tmplgpln.h
Testing Performed
=================
Index: tmplgpln.h
===================================================================
RCS file: /cvsroot/server/log/tmplgpln/tmplgpln.h,v
retrieving revision 1.19
retrieving revision 1.19.36.1
diff -u -d -r1.19 -r1.19.36.1
--- tmplgpln.h 11 Feb 2011 19:31:56 -0000 1.19
+++ tmplgpln.h 25 Mar 2013 10:42:01 -0000 1.19.36.1
@@ -81,7 +81,8 @@
#define REGKEY_PLUGINDEBUGLEVEL "config.LoggingTemplates.DebugLevel"
#define REGKEY_TEMPLATESERVERROOT "server.LoggingTemplates"
-
+#define REGKEY_VHOST_ROOT "vhost"
+#define REGKEY_CONFIGVHOST_ROOT "config.Vhost"
// Other registry values.
@@ -102,7 +103,6 @@
///////////////////////////////////////////////////////////////////////////////
// FORWARD DECLARES
///////////////////////////////////////////////////////////////////////////////
-
class CTBaseLog;
class CRegWatcher;
_INTERFACE IHXErrorMessages;
@@ -146,10 +146,12 @@
UINT32 m_ulServerTemplateRootRegId;
UINT32 m_ulConfigTemplateRootRegId;
+ UINT32 m_ulVhostConfigRootRegId;
CallbackHandle m_CheckConfig;
HXList* m_pLogs;
+ HXList* m_pVhostLogs;
IUnknown* m_pContext;
IHXCommonClassFactory* m_pCCF;
@@ -181,9 +183,10 @@
void Cleanup();
HX_RESULT SetupLogs();
- HX_RESULT CreateTemplate(UINT32 ulConfigRootRegId,
- char* szName,
- CTBaseLog** pLog);
+ HX_RESULT CreateTemplate(UINT32 ulConfigRootRegId,
+ char* szName,
+ CTBaseLog** pLog,
+ const char* pVhostAccount = NULL);
TemplateType GetTemplateType(UINT32 ulConfigRootRegId,
char* szName);
Index: tmplgpln.cpp
===================================================================
RCS file: /cvsroot/server/log/tmplgpln/tmplgpln.cpp,v
retrieving revision 1.24
retrieving revision 1.24.20.1
diff -u -d -r1.24 -r1.24.20.1
--- tmplgpln.cpp 21 Dec 2011 03:31:51 -0000 1.24
+++ tmplgpln.cpp 25 Mar 2013 10:42:01 -0000 1.24.20.1
@@ -158,13 +158,15 @@
, m_CheckConfig(0)
, m_pRegWatcher(NULL)
, m_pLogs(NULL)
+ , m_pVhostLogs(NULL)
, m_pContext(NULL)
, m_pErr(NULL)
, m_pCCF(NULL)
, m_pRegistry(NULL)
, m_pScheduler(NULL)
, m_pNetSvcs(NULL)
- , m_bErrorLogSuspended(FALSE)
+ , m_bErrorLogSuspended(FALSE)
+ , m_ulVhostConfigRootRegId(0)
{
}
@@ -182,11 +184,20 @@
if (m_pLogs)
{
- while (!m_pLogs->empty())
- {
- pTemp = (CTBaseLog*)m_pLogs->remove_head();
- HX_RELEASE(pTemp);
- }
+ while (!m_pLogs->empty())
+ {
+ pTemp = (CTBaseLog*)m_pLogs->remove_head();
+ HX_RELEASE(pTemp);
+ }
+ }
+
+ if (m_pVhostLogs)
+ {
+ while (!m_pVhostLogs->empty())
+ {
+ pTemp = (CTBaseLog*)m_pVhostLogs->remove_head();
+ HX_RELEASE(pTemp);
+ }
}
Cleanup();
@@ -203,10 +214,11 @@
{
if (m_pRegWatcher)
{
- m_pRegWatcher->Cleanup();
+ m_pRegWatcher->Cleanup();
}
HX_DELETE(m_pLogs);
+ HX_DELETE(m_pVhostLogs);
HX_RELEASE(m_pContext); //XXXDPL do I need to release the context?
HX_RELEASE(m_pCCF);
@@ -266,9 +278,10 @@
///////////////////////////////////////////////////////////////////////////////
HX_RESULT
-CTemplatizedLogger::CreateTemplate(UINT32 ulConfigRootRegId,
- char* szConfigRootRegName,
- CTBaseLog** ppLog)
+CTemplatizedLogger::CreateTemplate(UINT32 ulConfigRootRegId,
+ char* szConfigRootRegName,
+ CTBaseLog** ppLog,
+ const char* pVhostAccount)
{
HX_RESULT hr = HXR_OK;
@@ -310,7 +323,14 @@
case TEMPLATE_ERROR:
TLDPRINTF(TL_INIT | TL_CONFIG, ("(%s) Error log\n", szTemplateName));
- *ppLog = new CTErrorLog();
+ if (pVhostAccount)
+ {
+ *ppLog = new CTErrorLog(pVhostAccount);
+ }
+ else
+ {
+ *ppLog = new CTErrorLog();
+ }
break;
case TEMPLATE_RTSPEVENTS:
@@ -466,23 +486,26 @@
HX_RESULT hr;
- const char* szValueName = NULL;
- IHXValues* pTemplateList = NULL;
- CTBaseLog* pLog = NULL;
+ const char* szValueName = NULL;
+ IHXValues* pList = NULL;
+ IHXValues* pTemplateList = NULL;
+ CTBaseLog* pLog = NULL;
+ IHXBuffer* pBuffer = NULL;
HX_ASSERT(m_pRegistry);
-// Grab the list of log templates.
+ // Grab the list of log templates.
if (FAILED(m_pRegistry->GetPropListByName(REGKEY_TEMPLATECONFIGROOT, \
pTemplateList)))
- {
- return HXR_UNEXPECTED;
- }
-
+ {
+ return HXR_UNEXPECTED;
+ }
+
+ m_pRegWatcher->Manage(m_pRegistry->GetId(REGKEY_VHOST_ROOT));
hr = pTemplateList->GetFirstPropertyULONG32(szValueName, ulId);
while (SUCCEEDED(hr) && szValueName != NULL)
- {
+ {
if (m_pRegistry->GetTypeById(ulId) == PT_COMPOSITE)
{
if (SUCCEEDED(CreateTemplate(ulId, (char*)szValueName, &pLog))
@@ -497,17 +520,87 @@
}
else
{
- ReportError(HXLOG_ERR,
- HXR_UNEXPECTED,
- "[tmplgpln] template init: Could not init template.\n");
+ ReportError(HXLOG_ERR, HXR_UNEXPECTED,
+ "[tmplgpln] template init: Could not init template.\n");
HX_RELEASE(pLog);
}
}
-
- hr = pTemplateList->GetNextPropertyULONG32(szValueName, ulId);
+
+ hr = pTemplateList->GetNextPropertyULONG32(szValueName, ulId);
}
HX_RELEASE(pTemplateList);
+
+ // Grab the list of log templates for vhost
+ CHXString sAccountName;
+ CHXString sIdentifyString;
+ HX_RESULT hcRes = HXR_OK;
+ UINT32 ulCID = 0;
+ if (FAILED(m_pRegistry->GetPropListByName(REGKEY_VHOST_ROOT, pList)))
+ {
+ return HXR_UNEXPECTED;
+ }
+
+ hr = pList->GetFirstPropertyULONG32(szValueName, ulId);
+
+ while (SUCCEEDED(hr) && szValueName != NULL)
+ {
+ if (m_pRegistry->GetTypeById(ulId) == PT_COMPOSITE)
+ {
+ sAccountName = 1 + strrchr(szValueName, '.');
+
+ if (FAILED(m_pRegistry->GetStrByName((const \
char*)(REGKEY_CONFIGVHOST_ROOT"." + sAccountName + ".IdentifyString"), pBuffer)) || \
!pBuffer) + {
+ continue;
+ }
+
+ if (FAILED(m_pRegistry->GetPropListByName((const \
char*)(REGKEY_VHOST_ROOT"." + sAccountName + ".LoggingTemplates"), pTemplateList)) || \
!pTemplateList) + {
+ continue;
+ }
+
+ hcRes = pTemplateList->GetFirstPropertyULONG32(szValueName, ulCID);
+
+ while (SUCCEEDED(hcRes) && szValueName != NULL)
+ {
+ if (m_pRegistry->GetTypeById(ulCID) == PT_COMPOSITE)
+ {
+ if (SUCCEEDED(CreateTemplate(ulCID, (char*)szValueName, &pLog, \
(const char*)pBuffer->GetBuffer())) && + \
SUCCEEDED(pLog->WatchSelf(m_pRegWatcher))) + {
+ if (pBuffer->GetBuffer())
+ {
+ m_pVhostLogs->insert(pLog);
+ }
+ else
+ {
+ m_pLogs->insert(pLog);
+ }
+
+ if (pLog->IsEnabled())
+ {
+ pLog->StartLogging();
+ }
+ }
+ else
+ {
+ ReportError(HXLOG_ERR, HXR_UNEXPECTED,
+ "[tmplgpln] template init: Could not init template.\n");
+ HX_RELEASE(pLog);
+ }
+ }
+
+ hcRes = pTemplateList->GetNextPropertyULONG32(szValueName, ulCID);
+ }
+
+ HX_RELEASE(pBuffer);
+ HX_RELEASE(pTemplateList);
+ }
+
+ hr = pList->GetNextPropertyULONG32(szValueName, ulId);
+ }
+
+ HX_RELEASE(pList);
return HXR_OK;
}
@@ -576,6 +669,7 @@
}
m_pLogs = new HXList();
+ m_pVhostLogs = new HXList();
m_pRegWatcher = new CRegWatcher(m_pRegistry);
HX_ASSERT(m_pLogs);
@@ -602,6 +696,8 @@
hr = HXR_UNEXPECTED;
goto cleanup;
}
+
+ m_ulVhostConfigRootRegId = m_pRegistry->GetId(REGKEY_VHOST_ROOT);
IfFailGo(hr = SetupLogs());
IfFailGo(hr = m_pRegWatcher->Manage(m_ulConfigTemplateRootRegId));
@@ -770,7 +866,7 @@
STDMETHODIMP
CTemplatizedLogger::AddedProp(const UINT32 id,
- const HXPropType propType,
+ const HXPropType propType,
const UINT32 ulParentID)
{
CTBaseLog* pLogTemp = NULL;
@@ -778,12 +874,13 @@
IHXBuffer* pPropName = NULL;
IHXBuffer* pLogName = NULL;
-
+ CHXString sPropName;
+
HX_ASSERT(m_pRegWatcher);
HX_ASSERT(m_pScheduler);
-// For new logs, add a blank dummy template and set modified = TRUE to trigger
-// re-read from config.
+ // For new logs, add a blank dummy template and set modified = TRUE to trigger
+ // re-read from config.
IfFailGo(m_pRegistry->GetPropName(id, pPropName));
@@ -791,57 +888,111 @@
("OTF add, prop: %s\n",
(const char*)pPropName->GetBuffer()));
-
- if (ulParentID == m_ulConfigTemplateRootRegId
- || ulParentID == m_ulServerTemplateRootRegId)
+ if (ulParentID == m_ulVhostConfigRootRegId)
{
- UCHAR* szLogName = NULL;
+ UINT32 ulId = 0;
+ const char* szValueName = NULL;
- m_pCCF->CreateInstance(IID_IHXBuffer, (void**)&pLogName);
-
- szLogName = (UCHAR*)(1 + strrchr((const char*)pPropName->GetBuffer(), '.'));
+ CHXString sAccountName = (const char*)(1 + strrchr((const \
char*)pPropName->GetBuffer(), '.')); + CHXString sPropName = (const \
char*)pPropName->GetBuffer(); + sPropName += ".LoggingTemplates";
- IfFailGo(hr = pLogName->Set(szLogName, strlen((const char*)szLogName) + 1))
+ IHXValues* pTemplateList = NULL;
+ if (FAILED(m_pRegistry->GetPropListByName((const char*)sPropName, \
pTemplateList))) + {
+ return HXR_FAIL;
+ }
- TLDPRINTF((TL_OTF | TL_CONFIG),
- (" * new template - (%s).\n", (const \
char*)pLogName->GetBuffer()));
-
- pLogTemp = new CTNewOTFDummyLog();
+ HX_RESULT hcRes = pTemplateList->GetFirstPropertyULONG32(szValueName, ulId);
+
+ while (SUCCEEDED(hcRes) && szValueName != NULL)
+ {
+ if (m_pRegistry->GetTypeById(ulId) == PT_COMPOSITE)
+ {
+ if (SUCCEEDED(CreateTemplate(ulId, (char*)szValueName, &pLogTemp, \
(const char*)sAccountName)) && + \
SUCCEEDED(pLogTemp->WatchSelf(m_pRegWatcher))) + {
+ if (!sAccountName.IsEmpty())
+ {
+ m_pVhostLogs->insert(pLogTemp);
+ }
+ else
+ {
+ m_pLogs->insert(pLogTemp);
+ }
- HX_ASSERT(pLogTemp);
+ if (pLogTemp->IsEnabled())
+ {
+ pLogTemp->StartLogging();
+ }
+ }
+ else
+ {
+ ReportError(HXLOG_ERR, HXR_UNEXPECTED,
+ "[tmplgpln] template init: Could not init template.\n");
+ HX_RELEASE(pLogTemp);
+ }
+ }
- pLogTemp->AddRef();
- pLogTemp->FlagForRestart();
- pLogTemp->SetLogRootRegId(id);
- pLogTemp->SetName(pLogName);
+ hcRes = pTemplateList->GetNextPropertyULONG32(szValueName, ulId);
+ }
- m_pLogs->insert(pLogTemp);
+ HX_RELEASE(pTemplateList);
+ HX_RELEASE(pPropName);
}
else
{
- pLogTemp = FindParentLog(id);
+ if (ulParentID == m_ulConfigTemplateRootRegId
+ || ulParentID == m_ulServerTemplateRootRegId)
+ {
+ UCHAR* szLogName = NULL;
- if (pLogTemp == NULL)
- {
- // Could be a property on a new log.
- goto cleanup;
- }
+ m_pCCF->CreateInstance(IID_IHXBuffer, (void**)&pLogName);
- pLogName = pLogTemp->GetName();
+ szLogName = (UCHAR*)(1 + strrchr((const char*)pPropName->GetBuffer(), \
'.'));
- TLDPRINTF((TL_OTF | TL_CONFIG),
- (" * new entry on existing template - (%s).\n",
- (const char*)pLogName->GetBuffer()));
+ IfFailGo(hr = pLogName->Set(szLogName, strlen((const char*)szLogName) + \
1))
- pLogTemp->FlagForRestart();
- }
+ TLDPRINTF((TL_OTF | TL_CONFIG),
+ (" * new template - (%s).\n", (const \
char*)pLogName->GetBuffer())); +
+ pLogTemp = new CTNewOTFDummyLog();
- if (m_CheckConfig != 0)
- {
- m_pScheduler->Remove(m_CheckConfig);
- }
+ HX_ASSERT(pLogTemp);
- m_CheckConfig = m_pScheduler->RelativeEnter((IHXCallback*)this, \
CONFIGCHANGE_WAIT); + pLogTemp->AddRef();
+ pLogTemp->FlagForRestart();
+ pLogTemp->SetLogRootRegId(id);
+ pLogTemp->SetName(pLogName);
+
+ m_pLogs->insert(pLogTemp);
+ }
+ else
+ {
+ pLogTemp = FindParentLog(id);
+
+ if (pLogTemp == NULL)
+ {
+ // Could be a property on a new log.
+ goto cleanup;
+ }
+
+ pLogName = pLogTemp->GetName();
+
+ TLDPRINTF((TL_OTF | TL_CONFIG),
+ (" * new entry on existing template - (%s).\n",
+ (const char*)pLogName->GetBuffer()));
+
+ pLogTemp->FlagForRestart();
+ }
+
+ if (m_CheckConfig != 0)
+ {
+ m_pScheduler->Remove(m_CheckConfig);
+ }
+
+ m_CheckConfig = m_pScheduler->RelativeEnter((IHXCallback*)this, \
CONFIGCHANGE_WAIT); + }
cleanup:
@@ -866,55 +1017,111 @@
const UINT32 ulParentID)
{
CTBaseLog* pLogTemp = NULL;
- BOOL bDone = FALSE;
-
- HXList_iterator i(m_pLogs);
HX_ASSERT(m_pRegWatcher);
HX_ASSERT(m_pScheduler);
HX_ASSERT(m_pRegistry);
HX_ASSERT(m_pLogs);
-
- if (ulParentID == m_ulConfigTemplateRootRegId
- || ulParentID == m_ulServerTemplateRootRegId)
+ if (ulParentID == m_ulVhostConfigRootRegId)
{
- for (; *i != 0; ++i)
- {
- pLogTemp = (CTBaseLog*)*i;
-
-
- if (id == pLogTemp->GetLogRootRegId())
- {
+ HXList_iterator i(m_pVhostLogs);
+ HXList_iterator j(m_pVhostLogs);
+ CTBaseLog* pRemove = NULL;
+
+ for (; *i != 0; ++i)
+ {
+ pLogTemp = (CTBaseLog*)*i;
+
+ if (id == pLogTemp->GetGrandFatherRootRegId())
+ {
IHXBuffer* pLogName = pLogTemp->GetName();
TLDPRINTF((TL_OTF | TL_CONFIG),
("(%s) scheduled for delete!\n",
(const char*)pLogName->GetBuffer()));
HX_RELEASE(pLogName);
- pLogTemp->SetDeleted(TRUE);
- bDone = TRUE;
- }
- }
+ pLogTemp->SetDeleted(TRUE);
+ }
+ }
+
+ for (; *j != 0; ++j)
+ {
+
+ // Backtrack delete -- so we don't corrupt list iterator.
+ if (pRemove != NULL)
+ {
+ m_pVhostLogs->remove(pRemove);
+ HX_RELEASE(pRemove);
+ }
+
+ pLogTemp = (CTBaseLog*)*j;
+
+ if (pLogTemp->IsDeleted())
+ {
+ IHXBuffer* pLogName = pLogTemp->GetName();
+ TLDPRINTF((TL_OTF | TL_CONFIG),
+ ("(%s) deleting\n",
+ pLogName ? (const char*)pLogName->GetBuffer() : "?"));
+ HX_RELEASE(pLogName);
+
+ pRemove = pLogTemp;
+ pLogTemp->StopLogging();
+ pLogTemp->Cleanup();
+
+ // If deleted, don't bother checking for anything else.
+ continue;
+ }
+ }
+
+ // Straggler cleanup.
+ if (pRemove != NULL)
+ {
+ m_pVhostLogs->remove(pRemove);
+ HX_RELEASE(pRemove);
+ pRemove = NULL;
+ }
}
else
{
- pLogTemp = FindParentLog(id);
+ if (ulParentID == m_ulConfigTemplateRootRegId
+ || ulParentID == m_ulServerTemplateRootRegId)
+ {
+ HXList_iterator i(m_pLogs);
+ for (; *i != 0; ++i)
+ {
+ pLogTemp = (CTBaseLog*)*i;
- if (pLogTemp == NULL)
- {
- return HXR_UNEXPECTED;
- }
+ if (id == pLogTemp->GetLogRootRegId())
+ {
+ IHXBuffer* pLogName = pLogTemp->GetName();
+ TLDPRINTF((TL_OTF | TL_CONFIG),
+ ("(%s) scheduled for delete!\n",
+ (const char*)pLogName->GetBuffer()));
+ HX_RELEASE(pLogName);
+ pLogTemp->SetDeleted(TRUE);
+ }
+ }
+ }
+ else
+ {
+ pLogTemp = FindParentLog(id);
- pLogTemp->FlagForRestart();
- }
+ if (pLogTemp == NULL)
+ {
+ return HXR_UNEXPECTED;
+ }
- if (m_CheckConfig != 0)
- {
- m_pScheduler->Remove(m_CheckConfig);
- }
+ pLogTemp->FlagForRestart();
+ }
- m_CheckConfig = m_pScheduler->RelativeEnter((IHXCallback*)this, \
CONFIGCHANGE_WAIT); + if (m_CheckConfig != 0)
+ {
+ m_pScheduler->Remove(m_CheckConfig);
+ }
+ m_CheckConfig = m_pScheduler->RelativeEnter((IHXCallback*)this, \
CONFIGCHANGE_WAIT); + }
+
return HXR_OK;
}
@@ -939,7 +1146,7 @@
HX_ASSERT(m_pScheduler);
HX_ASSERT(m_pLogs);
-
+ CHXString sPropName;
IHXBuffer* pPropName = NULL;
IfFailGo(hr = m_pRegistry->GetPropName(id, pPropName));
@@ -948,27 +1155,29 @@
("OTF mod, prop: %s\n",
(const char*)pPropName->GetBuffer()));
+ sPropName = (const char*)pPropName->GetBuffer();
+
HX_RELEASE(pPropName);
pLogTemp = FindParentLog(id);
if (pLogTemp == NULL)
{
- // We're watching something that doesn't belong to us?
- HX_ASSERT(0);
- hr = HXR_UNEXPECTED;
+ // We're watching something that doesn't belong to us?
+ HX_ASSERT(0);
+ hr = HXR_UNEXPECTED;
goto cleanup;
}
HX_ASSERT(pLogTemp);
-// This call just flags what's changed and schedules a necessary restart.
-// The check config cb (scheduled just below this) actually APPLIES the changes (or \
restarts.) + // This call just flags what's changed and schedules a necessary \
restart. + // The check config cb (scheduled just below this) actually APPLIES the \
changes (or restarts.) pLogTemp->CheckForConfigChanges(id);
if (m_CheckConfig != 0)
{
- m_pScheduler->Remove(m_CheckConfig);
+ m_pScheduler->Remove(m_CheckConfig);
}
m_CheckConfig = m_pScheduler->RelativeEnter((IHXCallback*)this, \
CONFIGCHANGE_WAIT); @@ -993,7 +1202,6 @@
{
HXList_iterator i(m_pLogs);
- HXList_iterator j(m_pLogs);
CTBaseLog* pLogTemp = NULL;
CTBaseLog* pRemove = NULL;
@@ -1010,17 +1218,17 @@
for (; *i != 0; ++i)
{
- // Backtrack delete -- so we don't corrupt list iterator.
- if (pRemove != NULL)
- {
- m_pLogs->remove(pRemove);
- HX_RELEASE(pRemove);
- }
+ // Backtrack delete -- so we don't corrupt list iterator.
+ if (pRemove != NULL)
+ {
+ m_pLogs->remove(pRemove);
+ HX_RELEASE(pRemove);
+ }
- pLogTemp = (CTBaseLog*)*i;
+ pLogTemp = (CTBaseLog*)*i;
- if (pLogTemp->IsDeleted())
- {
+ if (pLogTemp->IsDeleted())
+ {
IHXBuffer* pLogName = pLogTemp->GetName();
TLDPRINTF((TL_OTF | TL_CONFIG),
("(%s) deleting\n",
@@ -1028,15 +1236,14 @@
HX_RELEASE(pLogName);
pRemove = pLogTemp;
- pLogTemp->StopLogging();
- pLogTemp->Cleanup();
-
- // If deleted, don't bother checking for anything else.
- continue;
- }
+ pLogTemp->StopLogging();
+ pLogTemp->Cleanup();
- else if (pLogTemp->IsRestartRequired())
- {
+ // If deleted, don't bother checking for anything else.
+ continue;
+ }
+ else if (pLogTemp->IsRestartRequired())
+ {
CTBaseLog* pNewLog = NULL;
IHXBuffer* pLogName = NULL;
UINT32 ulConfigRoot = pLogTemp->GetLogRootRegId();
@@ -1054,7 +1261,7 @@
("(%s) restarting logging services\n",
pLogName ? (const char*)pLogName->GetBuffer() : "?"));
- pRemove = pLogTemp;
+ pRemove = pLogTemp;
HX_ASSERT(ulConfigRoot != 0);
@@ -1064,7 +1271,7 @@
&& SUCCEEDED(pNewLog->WatchSelf(m_pRegWatcher)))
{
pLogTemp->Cleanup();
-
+
if (pNewLog->IsEnabled())
{
pNewLog->StartLogging();
@@ -1079,22 +1286,21 @@
HX_RELEASE(pLogName);
- // If template restart required, don't bother checking for anything else.
- continue;
- }
- else
- {
- pLogTemp->ApplyConfigChanges();
- }
-
+ // If template restart required, don't bother checking for anything \
else. + continue;
+ }
+ else
+ {
+ pLogTemp->ApplyConfigChanges();
+ }
}
-// Straggler cleanup.
+ // Straggler cleanup.
if (pRemove != NULL)
{
- m_pLogs->remove(pRemove);
- HX_RELEASE(pRemove);
- pRemove = NULL;
+ m_pLogs->remove(pRemove);
+ HX_RELEASE(pRemove);
+ pRemove = NULL;
}
m_CheckConfig = 0;
_______________________________________________
Server-cvs mailing list
Server-cvs@helixcommunity.org
http://lists.helixcommunity.org/mailman/listinfo/server-cvs
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic