dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #17557
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