Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #73251 > unrolled thread
| Started by | ptb <petertbrady@gmail.com> |
|---|---|
| First post | 2014-06-12 21:39 -0700 |
| Last post | 2014-06-13 14:18 -0700 |
| Articles | 2 — 1 participant |
Back to article view | Back to comp.lang.python
C-API proper initialization and deallocation of subclasses ptb <petertbrady@gmail.com> - 2014-06-12 21:39 -0700
Re: C-API proper initialization and deallocation of subclasses ptb <petertbrady@gmail.com> - 2014-06-13 14:18 -0700
| From | ptb <petertbrady@gmail.com> |
|---|---|
| Date | 2014-06-12 21:39 -0700 |
| Subject | C-API proper initialization and deallocation of subclasses |
| Message-ID | <2c227aa6-bdf2-4c99-851a-564d7ce56159@googlegroups.com> |
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.
[toc] | [next] | [standalone]
| From | ptb <petertbrady@gmail.com> |
|---|---|
| Date | 2014-06-13 14:18 -0700 |
| Message-ID | <0771eea5-5262-46f8-901c-7f5c92e02702@googlegroups.com> |
| In reply to | #73251 |
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.
[toc] | [prev] | [standalone]
Back to top | Article view | comp.lang.python
csiph-web