Backtrace:
-[
#0 0x001ec991 in PyObject_Malloc () from /usr/lib/libpython3.2mu.so.1.0
#1 0x001ea045 in _PyObject_New () from /usr/lib/libpython3.2mu.so.1.0
#2 0x00205cda in ?? () from /usr/lib/libpython3.2mu.so.1.0
#3 0x0020f3b5 in PyUnicodeUCS4_DecodeUTF8Stateful () from /usr/lib/libpython3.2mu.so.1.0
#4 0x0020f963 in PyUnicodeUCS4_DecodeUTF8 () from /usr/lib/libpython3.2mu.so.1.0
#5 0x00213f29 in PyUnicodeUCS4_Decode () from /usr/lib/libpython3.2mu.so.1.0
#6 0x007eeca8 in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
#7 0x00820b6c in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
#8 0x00821210 in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
...
...
#526 0x00821210 in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
#527 0x00821210 in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
#528 0x00821210 in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
#529 0x00821210 in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
#530 0x00821210 in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
#531 0x00821210 in ?? () from /usr/lib/python3/dist-packages/lxml/etree.cpython-32mu.so
A C programs crash after the second call to Py_Finalize() if lxml is used.
Tested with Python 2.5, 2.7 and 3.2. (etree. LXML_VERSION: (2, 3, 0, 0)) under Ubuntu 11.04.
The C code:
-[
#include <Python.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int x;
for( x=0;x<10; x++)
{
printf(" + Py_Initialize (%d)...\n", x);
Py_Initialize();
printf(" + PyRun_SimpleStr ing...\ n"); SimpleString( "from lxml import etree\n" \ VERSION\ n" \ 'test.xml' )\n" \
PyRun_
"print ' - etree.LXML_VERSION: ', etree.LXML_
"print ' - etree.parse()'\n" \
"tree = etree.parse(
"print ' - ok'\n");
printf(" + Py_Finalize. ..\n\n" );
Py_Finalize();
}
return 1;
}
]-
Compiled with:
shen139@ vega:~/ test$ gcc test-lxml.c -I/usr/ include/ python2. 7 -I/usr/ include/ python2. 7 -o test-lxml.o -L/usr/ lib/python2. 7/config -lpthread -ldl -lutil -lm -lpython2.7 -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic- functions
Using:
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)
[GCC 4.5.2] on linux2
The output: vega:~/ test$ ./test-lxml.o ing...
-[
shen139@
+ Py_Initialize (0)...
+ PyRun_SimpleStr
- etree.LXML_VERSION: (2, 3, 0, 0)
- etree.parse()
- ok
+ Py_Finalize...
+ Py_Initialize (1)... ing...
+ PyRun_SimpleStr
- etree.LXML_VERSION: (2, 3, 0, 0)
- etree.parse()
Segmentation fault
]-
Using:
Version: 3.2 (r32:88445, Mar 25 2011, 19:26:27)
[GCC 4.5.2]
Platform: linux2
Backtrace: libpython3. 2mu.so. 1.0 libpython3. 2mu.so. 1.0 libpython3. 2mu.so. 1.0 DecodeUTF8State ful () from /usr/lib/ libpython3. 2mu.so. 1.0 DecodeUTF8 () from /usr/lib/ libpython3. 2mu.so. 1.0 Decode () from /usr/lib/ libpython3. 2mu.so. 1.0 python3/ dist-packages/ lxml/etree. cpython- 32mu.so python3/ dist-packages/ lxml/etree. cpython- 32mu.so python3/ dist-packages/ lxml/etree. cpython- 32mu.so python3/ dist-packages/ lxml/etree. cpython- 32mu.so python3/ dist-packages/ lxml/etree. cpython- 32mu.so python3/ dist-packages/ lxml/etree. cpython- 32mu.so python3/ dist-packages/ lxml/etree. cpython- 32mu.so python3/ dist-packages/ lxml/etree. cpython- 32mu.so python3/ dist-packages/ lxml/etree. cpython- 32mu.so
-[
#0 0x001ec991 in PyObject_Malloc () from /usr/lib/
#1 0x001ea045 in _PyObject_New () from /usr/lib/
#2 0x00205cda in ?? () from /usr/lib/
#3 0x0020f3b5 in PyUnicodeUCS4_
#4 0x0020f963 in PyUnicodeUCS4_
#5 0x00213f29 in PyUnicodeUCS4_
#6 0x007eeca8 in ?? () from /usr/lib/
#7 0x00820b6c in ?? () from /usr/lib/
#8 0x00821210 in ?? () from /usr/lib/
...
...
#526 0x00821210 in ?? () from /usr/lib/
#527 0x00821210 in ?? () from /usr/lib/
#528 0x00821210 in ?? () from /usr/lib/
#529 0x00821210 in ?? () from /usr/lib/
#530 0x00821210 in ?? () from /usr/lib/
#531 0x00821210 in ?? () from /usr/lib/
...
...
.... many many many more......
]-