← Back to team overview

dolfin team mailing list archive

Re: Leak in Python interface

 


Johan Hake wrote:
> Thanks for the precise bug report!
> 
> While i forgot to update instant, hiding the real leak 
>

This is the third I've found in the past week (Instant, FFC and this
one), and having multiple leaks makes each one hard to find!

> a while I finally 
> nailed it. We needed to delete a void pointer to a shared_ptr<Foo*>. I do not 
> think SWIG allocated any extra memory, we just forgot to reduce a ref count on 
> a shared_ptr. 
> 

Very nice - looks great now. No memory increase for the simple loop
script that I've been testing with.

Are there any pro/cons in terms of the wrapper code to using
dolfin::Array versus std::vector for passing pointers between Python and
C++?


Garth

> Johan
> 
> On Friday 12 February 2010 16:39:59 Garth N. Wells wrote:
>> Johan Hake wrote:
>>> On Friday 12 February 2010 13:06:00 Garth N. Wells wrote:
>>>> Garth N. Wells wrote:
>>>>> I've tracked a leak in the Python interface down to the line:
>>>>>
>>>>>   # Initialize base class
>>>>>   cpp.Form.__init__(self, self._compiled_form, self.function_spaces,
>>>>> self.coefficients)
>>>>>
>>>>> on line 46 of form.py. If I do
>>>>>
>>>>>   cpp.Form.__init__(self, self._compiled_form, self.function_spaces,
>>>>> [])
>>>>>
>>>>> then there is no observable leak. Any ideas? I checked dolfin::Form it
>>>>> it looks ok. I even commented out all code in the dolfin::Form
>>>>> constructor to be sure.
>>>> Could the problem be in the SWIG wrapper for std::vector? The line
>>>>
>>>>     res = SWIG_ConvertPtrAndOwn(py_item, &itemp,
>>>> $descriptor(dolfin::TYPE *), 0, &newmem);
>>>>
>>>> looks suspicious. Johan?
>>> I can have a look at it. I see that you have reported a bug.
>> Yes, I dug deep enough that I could identify the problem precisely
>> enough for a bug report, but I couldn't fix it.
>>
>> Garth
>>
>>> Johan
>>>
>>>> Garth
>>>>
>>>>> Below is the script that I've been testing with.
>>>>>
>>>>> Garth
>>>>>
>>>>>
>>>>> from dolfin import *
>>>>> parameters["form_compiler"]["cpp_optimize"] = True
>>>>> parameters["form_compiler"]["optimize"] = True
>>>>> mesh = UnitSquare(16, 16)
>>>>> for t in xrange(20000):
>>>>>     for level in xrange(100):
>>>>>         V  = FunctionSpace(mesh, "CG", 1)
>>>>>         v  = TestFunction(V)
>>>>>         u  = Function(V)
>>>>>         u0 = Function(V)
>>>>>         L = v*(u-u0)*dx
>>>>>         b = assemble(L)
>>>>>     print "----"
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Mailing list: https://launchpad.net/~dolfin
>>>>> Post to     : dolfin@xxxxxxxxxxxxxxxxxxx
>>>>> Unsubscribe : https://launchpad.net/~dolfin
>>>>> More help   : https://help.launchpad.net/ListHelp
>>>> _______________________________________________
>>>> Mailing list: https://launchpad.net/~dolfin
>>>> Post to     : dolfin@xxxxxxxxxxxxxxxxxxx
>>>> Unsubscribe : https://launchpad.net/~dolfin
>>>> More help   : https://help.launchpad.net/ListHelp





Follow ups

References