← Back to team overview

dolfin team mailing list archive

Re: Memory leak in IntersectionDetector

 

Anders Logg wrote:
On Wed, Feb 27, 2008 at 08:09:12AM +0100, Dag Lindbo wrote:
Kristen Kaasbjerg wrote:
Hi again

One more thing I discovered is that the IntersectionDetector has
a memory leak (probably due to the undeleted GNode pointer).
This is relevant for the new eval function of the DiscreteFunction
class, which initiates an IntersectionDetector everytime the
DiscreteFunction is evaluated at a point. So many calls to the
eval function will eat up the memory!
Why do you create a new intersection detector on each evaluation??? It cost a lot more computation to initialize the search tree than to do the search. That is, if your mesh is constant you save a lot of computation by only constructing the IntersectionDetector once.

As for the memory leak, it is a known bug (http://www.fenics.org/cgi-bin/bugzilla/show_bug.cgi?id=26) and some work has been done to figure out what is going on.

Is it just that we don't delete the tree in the destructor:

IntersectionDetector::~IntersectionDetector()
{
  // FIXME: Should delete tree here but need to include GNode properly.
  // FIXME: (warning: invalid use of incomplete type 'struct _GNode')

  //if (tree)
  //  delete (GNode*) tree;
}

I commented it out since I couldn't get it to compile. (Didn't have
time before the release to figure out what goes wrong.)

Note that bugs should be assigned to dolfin-dev@xxxxxxxxxx, not
dolfin@xxxxxxxxxx (which is an alias for /dev/null).

Well... this is not the entire story. The leaves (pointers to bounding boxes) of the tree must be explicitly freed as well: gts_bb_tree_destroy(tree, 1). This still leaves some kbytes reachable (but not freed though).

   Dag


Follow ups

References