Your long self-conversation is the most interesting thing to
happen to this list in a long time…
From: pythondotnet-bounces+btribble=ea.com@python.org
[mailto:pythondotnet-bounces+btribble=ea.com@python.org] On Behalf Of Laszlo
Sebo
Sent: Wednesday, December 08, 2010 5:45 PM
To: pythondotnet@python.org
Subject: Re: [Python.NET] building on linux, mono 2.8.1
At the risk of having a long conversation here with
myself... :)
It appears that the crash happens in intobject.c of python, at the PyObject
*PyInt_FromLong(long ival) function, when it tries to increment the reference
counter: Py_INCREF(v);
When python.net calls this function first, it calls it with the value of 0,
which falls into a special handled range of integers that are dealt with in a
small_ints[] array. However, that array never go initialized, so the reference
counter crashes.
The array would normally be initialized by calling _PyInt_Init(void). Sooo...
just to test my theory, i exposed that function and called it explicitly from
Python.Runtime.Initialize() and low and behold, import clr now works just fine!
So i'll now go on a hunt, and make sure everything is initialized properly, i'm
guessing some main init function isn't being called somewhere when using
python.net from an embedded python.
cheers,
laszlo
On 08/12/2010 1:35 PM, Laszlo Sebo wrote:
Made a little bit of progress, but am now back to square
one.. :)
Basically, seems that the python embedded in nuke uses UCS4 instead of UCS2 which
is the default when building python. So the python so's i had were using UCS2
while Nuke's internal python was using UCS4. I rebuilt python using the
--enable-unicode=ucs4 flag, then rebuilt python.net.
I hit another wall fairly soon, the mono config (dll remap) file wasn't being
initialized, so i would be getting missing msvcrt dll errors on import clr.
To fix that, i had to uncomment this line in pynetinit.c:
//mono_config_parse(NULL);
However, now i am back to the previous error i had:
Stacktrace:
at (wrapper managed-to-native) Python.Runtime.Runtime.PyInt_FromLong
(intptr) <0x00060>
at (wrapper managed-to-native) Python.Runtime.Runtime.PyInt_FromLong
(intptr) <0xffffffff>
at Python.Runtime.Runtime.PyInt_FromInt32 (int) <0x0006b>
at Python.Runtime.Runtime.Initialize () <0x00433>
at Python.Runtime.PythonEngine.Initialize () <0x00073>
at (wrapper runtime-invoke) object.runtime_invoke_void
(object,intptr,intptr,intptr) <0xffffffff>
oh well... anybody managed to get python.net working with UCS4 python?
cheers,
laszlo