C-API proper initialization and deallocation of subclasses
ptb
petertbrady at gmail.com
Fri Jun 13 17:18:23 EDT 2014
While there doesn't appear to be too much interest in this question I thought I would post the solution. I had to modify shoddy by adding the proper flags and clear/traverse methods such to ensure that cyclic garbage collection was properly handled. I'm not quite sure why I had to do this since my shoddy instance did not have any cyclic references but I'm wondering if it was necessary since it's a subclass of list which has all the cyclic GC machinery in place. I suspect I won't understand the answer but if someone with more knowledge can clear things up, that would great.
On Thursday, June 12, 2014 10:39:27 PM UTC-6, ptb wrote:
> Hello all,
>
>
>
> I decided to play around with the C-API and have gotten stuck. I went through the Shoddy example (https://docs.python.org/3/extending/newtypes.html#subclassing-other-types) in the docs and tried to extend it by adding a method which creates and returns a shoddy instance. I dug around to find ways to allocate and initialize my shoddy instance and that seems to work well. However, I get segfaults when I try to delete my instance. The code is in the gist: https://gist.github.com/pbrady/f2daf50761e458bbe44a
>
>
>
> The magic happens in the make_a_shoddy function.
>
>
>
> Here's a sample session (Python 3.4.1)
>
>
>
> >>> from shoddy import make_a_shoddy()
>
> >>> shd = make_a_shoddy()
>
> tup build
>
> shd allocated
>
> list style allocation successful
>
> Py_SIZE(list) : 5
>
> Py_SIZE(shoddy) : 5
>
> >>> type(shd)
>
> <class 'shoddy.Shoddy'>
>
> >>> shd[:]
>
> [1, 2, 3, 4, 5]
>
> >>> shd.increment()
>
> 1
>
> >>> shd.increment()
>
> 2
>
> >>> del shd
>
> Segmentation fault (core dumped)
>
>
>
> This happens even if I don't set the destructor. Any ideas on what I am doing wrong?
>
>
>
> Thanks,
>
> Peter.
More information about the Python-list
mailing list