Fix DataPack memory leak regression from #848. (#850)

* Fix memory leak regression from https://github.com/alliedmodders/sourcemod/pull/848.
This commit is contained in:
Kyle Sanderson 2018-07-16 08:34:49 -07:00 committed by GitHub
parent 32d12ea4a6
commit 72acca4b9e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -65,25 +65,9 @@ CDataPack::Free(IDataPack *pack)
void CDataPack::Initialize() void CDataPack::Initialize()
{ {
for (size_t index = 0; index < elements.length(); ++index) do
{ {
switch (elements[index].type) } while (this->RemoveItem());
{
case CDataPackType::Raw:
{
delete elements[index].pData.vval;
elements.remove(index--);
break;
}
case CDataPackType::String:
{
delete elements[index].pData.sval;
elements.remove(index--);
break;
}
}
}
elements.clear(); elements.clear();
position = 0; position = 0;
@ -235,11 +219,27 @@ bool CDataPack::RemoveItem(size_t pos)
{ {
pos = position; pos = position;
} }
if (pos >= elements.length()) if (pos >= elements.length())
{ {
return false; return false;
} }
switch (elements[pos].type)
{
case CDataPackType::Raw:
{
delete elements[pos].pData.vval;
break;
}
case CDataPackType::String:
{
delete elements[pos].pData.sval;
break;
}
}
elements.remove(pos); elements.remove(pos);
--position; --position;
return true; return true;