PyThreadState_Swap difference in 2.3.2?

Mark Hammond mhammond at skippinet.com.au
Tue Dec 16 01:16:54 CET 2003


Paul Miller wrote:

>>The same thing stumped me too a couple of days ago (s.
>>http://groups.google.nl/groups?q=PyNew_Interpreter&hl=nl&lr=&ie=UTF-8&oe=UTF-8&selm=braiu1%243r3%241%40news4.tilbu1.nb.home.nl&rnum=1 )
>>with 2.3.3c1 (same applies 2.4a0 for that matter).
> 
> 
> Interesting. Unfortunately, there isn't a whole lot of information out
> there on what we're trying to do.
> 
> I went ahead and commented out that check, but then I came across another
> problem. In object.c, it hit an assertion:
> 
> 	assert(mro != NULL);
> 
> This was for a custom Python type I had created in C. It was assuming this
> mro field was initialized, which it wasn't. It must be something new,
> because this all used to work in 2.2
> 
> I will have to keep looking at the release notes.
> 
> I wish there was a "upgrading from 2.2 to 2.3" document for people who are
> writing custom Python extensions, and doing embedding and such.

This assertion appears in PyObject_GenericGetAttr().  What was the 
attribute being requested?  I'm guessing your extension type is doing 
something funky, as otherwise PyObject_GenericGetAttr() would not be called.

Almost all of my types upgraded without any pain.  A few of the win32com 
ones did require work to work with tp_iter, but that is only as these 
types are themselves doing funky things.

I *think* that having tp_flags as zero works OK, but as soon as you use 
Py_TPFLAGS_DEFAULT, you are expected to initialize your type 
differently.  Sorry, but I can recall any more details.

Mark.





More information about the Python-list mailing list