Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • sensei sensei
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 24
    • Issues 24
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 9
    • Merge requests 9
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • sensei
  • senseisensei
  • Issues
  • #16
Closed
Open
Issue created Apr 23, 2018 by Andrew Bauer@acbauerOwner

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;
}
Assignee
Assign to
Time tracking