Commit 3fb1ab66 authored by Sergey.Konovalov's avatar Sergey.Konovalov Committed by Alexander Trofimov

memory leak

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@59187 954022d7-b5bf-4e40-9824-e11837661b57
parent e5773581
......@@ -176,9 +176,8 @@ namespace XmlUtils
// CXmlNode
CXmlNode::CXmlNode(const CXmlNode& oSrc)
{
m_pBase = oSrc.m_pBase;
if (NULL != m_pBase)
m_pBase->AddRef();
m_pBase = NULL;
SetBase(oSrc.m_pBase);
}
CString CXmlNode::private_GetXml()
......@@ -223,9 +222,10 @@ namespace XmlUtils
delete m_pDocument;
return false;
}
// m_pBase AddRef, CXmlNode m_pBase( RefCount==1, AddRef )
m_pBase = m_pDocument->m_pNode;
m_pBase->AddRef();
// Parse Node m_pDocument AddRef, Release( ), Node
m_pDocument->Release();
return true;
}
......@@ -251,10 +251,10 @@ namespace XmlUtils
delete m_pDocument;
return false;
}
// m_pBase AddRef, CXmlNode m_pBase( RefCount==1, AddRef )
m_pBase = m_pDocument->m_pNode;
m_pBase->AddRef();
// Parse Node m_pDocument AddRef, Release( ), Node
m_pDocument->Release();
return true;
}
bool CXmlNode::FromXmlString(const std::wstring& sString)
......@@ -300,10 +300,17 @@ namespace XmlUtils
}
void CXmlNode::Clear()
{
if (NULL != m_pBase)
m_pBase->Release();
this->SetBase(NULL);
}
void CXmlNode::SetBase(CXmlNodeBase* pBase)
{
CXmlNodeBase* pBaseOld = m_pBase;
m_pBase = pBase;
if(NULL != m_pBase)
m_pBase->AddRef();
if (NULL != pBaseOld)
pBaseOld->Release();
}
CString CXmlNode::ReadAttributeBase(const wchar_t* bstrName)
{
return GetAttribute(CString(bstrName));
......@@ -520,8 +527,7 @@ namespace XmlUtils
if (strNodeName == GetNameNoNS(m_pBase->m_nodes[i]->m_sName))
{
CXmlNodeBase* pBase = m_pBase->m_nodes[i];
pBase->AddRef();
node.m_pBase = pBase;
node.SetBase(pBase);
break;
}
}
......@@ -546,8 +552,7 @@ namespace XmlUtils
if (sName == m_pBase->m_nodes[i]->m_sName)
{
CXmlNodeBase* pBase = m_pBase->m_nodes[i];
pBase->AddRef();
oNode.m_pBase = pBase;
oNode.SetBase(pBase);
bRes = true;
break;
}
......@@ -569,9 +574,8 @@ namespace XmlUtils
if (bGetAll || sName == m_pBase->m_nodes[i]->m_sName)
{
CXmlNode oNode;
oNode.m_pBase = m_pBase->m_nodes[i];
if (oNode.m_pBase)
oNode.m_pBase->AddRef();
CXmlNodeBase* pBase = m_pBase->m_nodes[i];
oNode.SetBase(pBase);
oNodes.m_nodes.insert(oNodes.m_nodes.end(), oNode);
}
}
......@@ -591,9 +595,8 @@ namespace XmlUtils
for (int i = 0; i < nCount; ++i)
{
CXmlNode oNode;
oNode.m_pBase = m_pBase->m_nodes[i];
if (oNode.m_pBase)
oNode.m_pBase->AddRef();
CXmlNodeBase* pBase = m_pBase->m_nodes[i];
oNode.SetBase(pBase);
oXmlNodes.m_nodes.insert(oXmlNodes.m_nodes.end(), oNode);
}
}
......@@ -608,10 +611,7 @@ namespace XmlUtils
CXmlNode& CXmlNode::operator=(const CXmlNode& oSrc)
{
m_pBase = oSrc.m_pBase;
if (NULL != m_pBase)
m_pBase->AddRef();
this->SetBase(oSrc.m_pBase);
return *this;
}
CString CXmlNode::GetNamespace(const CString& strNodeName)
......
......@@ -717,7 +717,7 @@ namespace XmlUtils
{
CXmlNodeBase* pNode = m_nodes[i];
if (NULL != pNode)
delete pNode;
pNode->Release();
}
}
......@@ -888,6 +888,7 @@ namespace XmlUtils
CXmlNode& operator=(const CXmlNode& oSrc);
private:
void SetBase(CXmlNodeBase* pBase);
CString GetNamespace(const CString& strNodeName);
CString GetNameNoNS(const CString& strNodeName);
public:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment