>  No, __dealloc__ is guaranteed to be called, otherwise this could very
>  easily lead to memory leaks. I'm no C++ expert, but I'm not
>  understanding why __dealloc__ needs to be defined twice. Won't the
>  delete that's called on self.foo_ptr delete self.bar_ptr just fine
>  (since they're really pointers to the same object?)

Yes.

>  cdef class Foo:
>      def __dealloc__(self):
>          self._dealloc_cpp_pointers()
>      cdef dealloc(self):
>
>          functionThatCallsDelete(self.foo_ptr)
>      ...
>
>  cdef class Bar(Foo):
>      ...
>      cdef _dealloc_cpp_pointers(self):
>          functionThatCallsDelete(self.bar_ptr)
>      ...

Will the method lookup for self._dealloc_cpp_pointers actually find
the one in the right class though?  I would think that in class Foo,
self is known to be a Foo, therefore Foo._dealloc_cpp_pointers() will
always be called?  I will try this, but maybe it would work if the
method were not cdefd.  Also, will this type of thing work with
__cinit__?

Thanks

Brian

>
>
>
>  >
>  > Thanks
>  >
>  > Brian
>  >
>  > On Fri, Apr 18, 2008 at 3:00 PM, Michael.Abshoff
>  > <[EMAIL PROTECTED]> wrote:
>  >> Brian Granger wrote:
>  >>
>  >>  Hi Brian,
>  >>
>  >>
>  >>>>  Yes, at least to see if it can spot the problem.
>  >>>>
>  >>>>  To get started: Build your own python. Make sure to compile it
>  >>>> with
>  >>>>  "--without-pymalloc" and also set the compile flags to "-O0 -
>  >>>> g". Build
>  >>>>  valgrind 3.3.0 [or install it from binary packages] and run
>  >>>> your code
>  >>>>  under it. If it segfaults valgrind [it happens to me somewhat
>  >>>> regularly,
>  >>>>  but then usually something evil is happening in libSingular ;]
>  >>>> go and
>  >>>>  check out the 3.4svn version.
>  >>>
>  >>> Thanks, I will try this out.  I have never used valgrind, so this is
>  >>> very helpful.
>  >>
>  >>  Ok, to run it do
>  >>
>  >>  valgrind --tool=memcheck --trace-children=yes --leak-resolution=high
>  >>  --log-file=foo ./path/to/python
>  >>
>  >>  Then do your thing, quit python. At that point there should be
>  >> foo.$PID
>  >>  in the cwd. For a C++ specific example where we did dumb things at
>  >>  dealloc time from Sage look at
>  >>
>  >>  http://trac.sagemath.org/sage_trac/ticket/1573
>  >>
>  >>  Also: searching for delete[] in Sage's trac will turn up a number of
>  >>  other examples. If you get stuck feel free to post the example
>  >> here and
>  >>  once I take a look at the code I may be able to help you out.
>  >>
>  >>
>  >>>>  Let me know if you have any trouble.
>  >>>
>  >>> Thanks
>  >>>
>  >>> Brian
>  >>>
>  >>
>  >>  In the end I would assume people won't mind if some easy cases
>  >> would get
>  >>  added to the Cython wiki in form of a tutorial, i.e. if you do
>  >> FOO it
>  >>  blows up but BAR fixes it. I have meant to do this for a long,
>  >> long time
>  >>  in the Sage wiki, but never got around to it. But it should
>  >> probably be
>  >>  in the Cython wiki for obvious reasons.
>  >>
>  >>  Thought?
>  >>
>  >>
>  >>
>  >>  Cheers,
>  >>
>  >>  Michael
>  >>  _______________________________________________
>  >>  Cython-dev mailing list
>  >>  [email protected]
>  >>  http://codespeak.net/mailman/listinfo/cython-dev
>  >>
>  > _______________________________________________
>  > Cython-dev mailing list
>  > [email protected]
>  > http://codespeak.net/mailman/listinfo/cython-dev
>
>  _______________________________________________
>  Cython-dev mailing list
>  [email protected]
>  http://codespeak.net/mailman/listinfo/cython-dev
>
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to