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 [email protected], not
> [EMAIL PROTECTED] (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
_______________________________________________
DOLFIN-dev mailing list
[email protected]
http://www.fenics.org/mailman/listinfo/dolfin-dev