Memory leak in VTKDataAdaptor
Running the testHistogramSerial
test with VTK_DEBUG_LEAKS enabled will show the leaks. The leak is in VTKDataAdaptor::GetMesh():
//----------------------------------------------------------------------------
int VTKDataAdaptor::GetMesh(const std::string &meshName, bool structureOnly,
vtkDataObject *&mesh)
{
vtkDataObject *dobj = nullptr;
if (this->GetDataObject(meshName, dobj))
{
SENSEI_ERROR("Failed to get mesh \"" << meshName << "\"")
return -1;
}
if (vtkCompositeDataSet *cd = dynamic_cast<vtkCompositeDataSet*>(dobj))
{
vtkCompositeDataSet *cdo = cd->NewInstance(); ---------------------- maybe a memory leak
cdo->CopyStructure(cd);
vtkCompositeDataIterator *cdit = cd->NewIterator(); ------------------------ probably a memory leak
while (!cdit->IsDoneWithTraversal())
{
vtkDataObject *dobj = cd->GetDataSet(cdit);
vtkDataObject *dobjo = dobj->NewInstance(); ---------------------- maybe a memory leak
if (!structureOnly)
{
if (vtkDataSet *ds = dynamic_cast<vtkDataSet*>(dobj))
{
vtkDataSet *dso = static_cast<vtkDataSet*>(dobjo);
dso->CopyStructure(ds);
}
}
cdo->SetDataSet(cdit, dobjo);
cdit->GoToNextItem();
}
mesh = cdo;
return 0;
}
if (vtkDataSet *ds = dynamic_cast<vtkDataSet*>(dobj))
{
vtkDataSet *dsOut = ds->NewInstance(); ------------------- definitely a memory leak
if (!structureOnly)
dsOut->CopyStructure(ds);
mesh = dsOut;
return 0;
}
SENSEI_ERROR("Unsupoorted data object type " << dobj->GetClassName())
return -1;
}