Package: python-gi
Version: 3.2.2-1
Severity: serious

On the pygtk page everyone is encouraged to upgrade from pygtk to
using gtk&Co through gobject introspection. The further described
behavior introduces a regression compared to pygtk.

You call Py_Initialize(), then import a python script, which contains
at least one(!) of the following imports:
from gi.repository import GLib
from gi.repository import Gtk
from gi.repository import Cairo
from gi.repository import Pango
from gi.repository import Gio
Than you call Py_Finalize();
After you repeat Py_Initialize() and try to import the script again,
it segfaults.
But there is no problems with pygtk.

Please try out this small program and if it fails for you, please
confirm the bug upstream:
https://bugzilla.gnome.org/show_bug.cgi?id=677091.

Thanks,
Andrey
running embedded python...
[36161 refs]
...done
running embedded python...

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff79dcc27 in PyObject_GC_UnTrack (op=0xb60da8) at 
../Modules/gcmodule.c:1428
1428    ../Modules/gcmodule.c: No such file or directory.
(gdb) bt
#0  0x00007ffff79dcc27 in PyObject_GC_UnTrack (op=0xb60da8) at 
../Modules/gcmodule.c:1428
#1  0x00007ffff6179e1b in _base_info_dealloc (self=0xb60da8) at 
/home/martin/debian/pkg-gnome/build-area/pygobject-3.2.2/gi/pygi-info.c:35
#2  0x00007ffff78ec9eb in _Py_Dealloc (op=0xb60da8) at ../Objects/object.c:2243
#3  0x00007ffff78be583 in frame_dealloc (f=0xba4c10) at 
../Objects/frameobject.c:458
#4  0x00007ffff78ec9eb in _Py_Dealloc (op=0xba4c10) at ../Objects/object.c:2243
#5  0x00007ffff798b355 in PyEval_EvalCodeEx (co=0xb01880, globals=0xb967f0, 
locals=0x0, args=0xb86088, argcount=2, kws=0x0, kwcount=0, defs=0x0, 
    defcount=0, closure=0x0) at ../Python/ceval.c:3264
#6  0x00007ffff78c215b in function_call (func=0xb7b8e8, arg=0xb86060, kw=0x0) 
at ../Objects/funcobject.c:526
#7  0x00007ffff7882182 in PyObject_Call (func=0xb7b8e8, arg=0xb86060, kw=0x0) 
at ../Objects/abstract.c:2529
#8  0x00007ffff789e1c1 in instancemethod_call (func=0xb7b8e8, arg=0xb86060, 
kw=0x0) at ../Objects/classobject.c:2578
#9  0x00007ffff7882182 in PyObject_Call (func=0x802060, arg=0xb85840, kw=0x0) 
at ../Objects/abstract.c:2529
#10 0x00007ffff7882e9d in PyObject_CallFunctionObjArgs (callable=0x802060) at 
../Objects/abstract.c:2760
#11 0x00007ffff7923cb4 in call_attribute (self=0xb79d10, attr=0x802060, 
name=0xa25a60) at ../Objects/typeobject.c:5441
#12 0x00007ffff7923f7f in slot_tp_getattr_hook (self=0xb79d10, name=0xa25a60) 
at ../Objects/typeobject.c:5495
#13 0x00007ffff78e9e8c in PyObject_GetAttr (v=0xb79d10, name=0xa25a60) at 
../Objects/object.c:1191
#14 0x00007ffff7986d65 in PyEval_EvalFrameEx (f=0xba45d0, throwflag=0) at 
../Python/ceval.c:2256
#15 0x00007ffff798b2a9 in PyEval_EvalCodeEx (co=0xb78e00, globals=0xba7780, 
locals=0x0, args=0xba2810, argcount=0, kws=0xba2810, kwcount=0, defs=0x0, 
    defcount=0, closure=0x0) at ../Python/ceval.c:3253
#16 0x00007ffff798e3c1 in fast_function (func=0xb7b798, 
pp_stack=0x7ffffffeca00, n=0, na=0, nk=0) at ../Python/ceval.c:4117
#17 0x00007ffff798df84 in call_function (pp_stack=0x7ffffffeca00, oparg=0) at 
../Python/ceval.c:4042
#18 0x00007ffff79887a4 in PyEval_EvalFrameEx (f=0xba2670, throwflag=0) at 
../Python/ceval.c:2666
#19 0x00007ffff798b2a9 in PyEval_EvalCodeEx (co=0xb83b40, globals=0xba7780, 
locals=0xba7780, args=0x0, argcount=0, kws=0x0, kwcount=0, defs=0x0, 
    defcount=0, closure=0x0) at ../Python/ceval.c:3253
#20 0x00007ffff79809f4 in PyEval_EvalCode (co=0xb83b40, globals=0xba7780, 
locals=0xba7780) at ../Python/ceval.c:667
#21 0x00007ffff79aa0e0 in PyImport_ExecCodeModuleEx (name=0x7ffffffef090 
"gi.overrides.GLib", co=0xb83b40, 
    pathname=0x7ffffffeceb0 
"/usr/lib/python2.7/dist-packages/gi/overrides/GLib.pyc") at 
../Python/import.c:681
#22 0x00007ffff79aadfb in load_source_module (name=0x7ffffffef090 
"gi.overrides.GLib", 
    pathname=0x7ffffffeceb0 
"/usr/lib/python2.7/dist-packages/gi/overrides/GLib.pyc", fp=0xba2400) at 
../Python/import.c:1018
#23 0x00007ffff79acad8 in load_module (name=0x7ffffffef090 "gi.overrides.GLib", 
fp=0xba2400, 
    pathname=0x7ffffffedf90 
"/usr/lib/python2.7/dist-packages/gi/overrides/GLib.py", type=1, loader=0x0) at 
../Python/import.c:1822
#24 0x00007ffff79aef41 in import_submodule (mod=0xb73198, subname=0x9a6974 
"GLib", fullname=0x7ffffffef090 "gi.overrides.GLib") at ../Python/import.c:2595
#25 0x00007ffff79aea1c in ensure_fromlist (mod=0xb73198, fromlist=0xb7c240, 
buf=0x7ffffffef090 "gi.overrides.GLib", buflen=12, recursive=0)
    at ../Python/import.c:2506
#26 0x00007ffff79ad9a0 in import_module_level (name=0x0, globals=0x0, 
locals=0x0, fromlist=0xb7c240, level=-1) at ../Python/import.c:2174
#27 0x00007ffff79ada89 in PyImport_ImportModuleLevel (name=0xb52e44 
"gi.overrides", globals=0x0, locals=0x0, fromlist=0xb7c240, level=-1)
    at ../Python/import.c:2188
#28 0x00007ffff79766c7 in builtin___import__ (self=0x0, args=0xb79b50, 
kwds=0xba22e0) at ../Python/bltinmodule.c:49
#29 0x00007ffff78e5ef4 in PyCFunction_Call (func=0xa72858, arg=0xb79b50, 
kw=0xba22e0) at ../Objects/methodobject.c:85
#30 0x00007ffff798ec47 in do_call (func=0xa72858, pp_stack=0x7fffffff0310, 
na=1, nk=1) at ../Python/ceval.c:4236
#31 0x00007ffff798dfa0 in call_function (pp_stack=0x7fffffff0310, oparg=257) at 
../Python/ceval.c:4044
#32 0x00007ffff79887a4 in PyEval_EvalFrameEx (f=0xba20d0, throwflag=0) at 
../Python/ceval.c:2666
#33 0x00007ffff798b2a9 in PyEval_EvalCodeEx (co=0xb099e0, globals=0xb967f0, 
locals=0x0, args=0xba1890, argcount=1, kws=0xba1898, kwcount=0, defs=0x0, 
    defcount=0, closure=0x0) at ../Python/ceval.c:3253
#34 0x00007ffff798e3c1 in fast_function (func=0xb7bb88, 
pp_stack=0x7fffffff07d0, n=1, na=1, nk=0) at ../Python/ceval.c:4117
#35 0x00007ffff798df84 in call_function (pp_stack=0x7fffffff07d0, oparg=0) at 
../Python/ceval.c:4042
#36 0x00007ffff79887a4 in PyEval_EvalFrameEx (f=0xba16e0, throwflag=0) at 
../Python/ceval.c:2666
#37 0x00007ffff798b2a9 in PyEval_EvalCodeEx (co=0x94e1a0, globals=0x99a430, 
locals=0x0, args=0xb7c8f8, argcount=2, kws=0x0, kwcount=0, defs=0x0, 
    defcount=0, closure=0x0) at ../Python/ceval.c:3253
#38 0x00007ffff78c215b in function_call (func=0xb7d258, arg=0xb7c8d0, kw=0x0) 
at ../Objects/funcobject.c:526
#39 0x00007ffff7882182 in PyObject_Call (func=0xb7d258, arg=0xb7c8d0, kw=0x0) 
at ../Objects/abstract.c:2529
#40 0x00007ffff789e1c1 in instancemethod_call (func=0xb7d258, arg=0xb7c8d0, 
kw=0x0) at ../Objects/classobject.c:2578
#41 0x00007ffff7882182 in PyObject_Call (func=0x8021e0, arg=0xb79ae0, kw=0x0) 
at ../Objects/abstract.c:2529
#42 0x00007ffff78822ea in call_function_tail (callable=0x8021e0, args=0xb79ae0) 
at ../Objects/abstract.c:2561
#43 0x00007ffff78826fc in PyObject_CallMethod (o=0xb74760, name=0x7ffff7a82685 
"load_module", format=0x7ffff7a82567 "s") at ../Objects/abstract.c:2638
#44 0x00007ffff79accc2 in load_module (name=0x7fffffff21c0 
"gi.repository.GLib", fp=0x0, pathname=0x7fffffff10c0 "", type=9, 
loader=0xb74760)
    at ../Python/import.c:1877
#45 0x00007ffff79aef41 in import_submodule (mod=0x9490c8, subname=0x9a6974 
"GLib", fullname=0x7fffffff21c0 "gi.repository.GLib") at ../Python/import.c:2595
#46 0x00007ffff79aea1c in ensure_fromlist (mod=0x9490c8, fromlist=0xb6bfb0, 
buf=0x7fffffff21c0 "gi.repository.GLib", buflen=13, recursive=0)
    at ../Python/import.c:2506
#47 0x00007ffff79ad9a0 in import_module_level (name=0x0, globals=0xba34a0, 
locals=0xba34a0, fromlist=0xb6bfb0, level=-1) at ../Python/import.c:2174
#48 0x00007ffff79ada89 in PyImport_ImportModuleLevel (name=0x92cd74 
"gi.repository", globals=0xba34a0, locals=0xba34a0, fromlist=0xb6bfb0, level=-1)
    at ../Python/import.c:2188
#49 0x00007ffff79766c7 in builtin___import__ (self=0x0, args=0xb70b00, 
kwds=0x0) at ../Python/bltinmodule.c:49
#50 0x00007ffff78e5ef4 in PyCFunction_Call (func=0xa72858, arg=0xb70b00, 
kw=0x0) at ../Objects/methodobject.c:85
#51 0x00007ffff7882182 in PyObject_Call (func=0xa72858, arg=0xb70b00, kw=0x0) 
at ../Objects/abstract.c:2529
#52 0x00007ffff798d4b1 in PyEval_CallObjectWithKeywords (func=0xa72858, 
arg=0xb70b00, kw=0x0) at ../Python/ceval.c:3890
#53 0x00007ffff79872f3 in PyEval_EvalFrameEx (f=0xba3890, throwflag=0) at 
../Python/ceval.c:2333
#54 0x00007ffff798b2a9 in PyEval_EvalCodeEx (co=0xb78720, globals=0xba34a0, 
locals=0xba34a0, args=0x0, argcount=0, kws=0x0, kwcount=0, defs=0x0, 
    defcount=0, closure=0x0) at ../Python/ceval.c:3253
#55 0x00007ffff79809f4 in PyEval_EvalCode (co=0xb78720, globals=0xba34a0, 
locals=0xba34a0) at ../Python/ceval.c:667
#56 0x00007ffff79aa0e0 in PyImport_ExecCodeModuleEx (name=0x7fffffff5a80 
"gi.overrides.Gio", co=0xb78720, 
    pathname=0x7fffffff38a0 
"/usr/lib/python2.7/dist-packages/gi/overrides/Gio.pyc") at 
../Python/import.c:681
#57 0x00007ffff79aadfb in load_source_module (name=0x7fffffff5a80 
"gi.overrides.Gio", 
    pathname=0x7fffffff38a0 
"/usr/lib/python2.7/dist-packages/gi/overrides/Gio.pyc", fp=0xba1140) at 
../Python/import.c:1018
#58 0x00007ffff79acad8 in load_module (name=0x7fffffff5a80 "gi.overrides.Gio", 
fp=0xba1140, 
    pathname=0x7fffffff4980 
"/usr/lib/python2.7/dist-packages/gi/overrides/Gio.py", type=1, loader=0x0) at 
../Python/import.c:1822
#59 0x00007ffff79aef41 in import_submodule (mod=0xb73198, subname=0xb6043c 
"Gio", fullname=0x7fffffff5a80 "gi.overrides.Gio") at ../Python/import.c:2595
#60 0x00007ffff79aea1c in ensure_fromlist (mod=0xb73198, fromlist=0xb7c2b8, 
buf=0x7fffffff5a80 "gi.overrides.Gio", buflen=12, recursive=0)
    at ../Python/import.c:2506
#61 0x00007ffff79ad9a0 in import_module_level (name=0x0, globals=0x0, 
locals=0x0, fromlist=0xb7c2b8, level=-1) at ../Python/import.c:2174
#62 0x00007ffff79ada89 in PyImport_ImportModuleLevel (name=0xb52e44 
"gi.overrides", globals=0x0, locals=0x0, fromlist=0xb7c2b8, level=-1)
    at ../Python/import.c:2188
#63 0x00007ffff79766c7 in builtin___import__ (self=0x0, args=0x94f290, 
kwds=0xba1020) at ../Python/bltinmodule.c:49
#64 0x00007ffff78e5ef4 in PyCFunction_Call (func=0xa72858, arg=0x94f290, 
kw=0xba1020) at ../Objects/methodobject.c:85
#65 0x00007ffff798ec47 in do_call (func=0xa72858, pp_stack=0x7fffffff6d00, 
na=1, nk=1) at ../Python/ceval.c:4236
#66 0x00007ffff798dfa0 in call_function (pp_stack=0x7fffffff6d00, oparg=257) at 
../Python/ceval.c:4044
#67 0x00007ffff79887a4 in PyEval_EvalFrameEx (f=0x999ec0, throwflag=0) at 
../Python/ceval.c:2666
#68 0x00007ffff798b2a9 in PyEval_EvalCodeEx (co=0xb099e0, globals=0xb967f0, 
locals=0x0, args=0xb44d50, argcount=1, kws=0xb44d58, kwcount=0, defs=0x0, 
    defcount=0, closure=0x0) at ../Python/ceval.c:3253
#69 0x00007ffff798e3c1 in fast_function (func=0xb7bb88, 
pp_stack=0x7fffffff71c0, n=1, na=1, nk=0) at ../Python/ceval.c:4117
#70 0x00007ffff798df84 in call_function (pp_stack=0x7fffffff71c0, oparg=0) at 
../Python/ceval.c:4042
#71 0x00007ffff79887a4 in PyEval_EvalFrameEx (f=0xb44ba0, throwflag=0) at 
../Python/ceval.c:2666
#72 0x00007ffff798b2a9 in PyEval_EvalCodeEx (co=0x94e1a0, globals=0x99a430, 
locals=0x0, args=0xa40718, argcount=2, kws=0x0, kwcount=0, defs=0x0, 
    defcount=0, closure=0x0) at ../Python/ceval.c:3253
#73 0x00007ffff78c215b in function_call (func=0xb7d258, arg=0xa406f0, kw=0x0) 
at ../Objects/funcobject.c:526
#74 0x00007ffff7882182 in PyObject_Call (func=0xb7d258, arg=0xa406f0, kw=0x0) 
at ../Objects/abstract.c:2529
#75 0x00007ffff789e1c1 in instancemethod_call (func=0xb7d258, arg=0xa406f0, 
kw=0x0) at ../Objects/classobject.c:2578
#76 0x00007ffff7882182 in PyObject_Call (func=0x9c6b60, arg=0x80fb50, kw=0x0) 
at ../Objects/abstract.c:2529
#77 0x00007ffff78822ea in call_function_tail (callable=0x9c6b60, args=0x80fb50) 
at ../Objects/abstract.c:2561
#78 0x00007ffff78826fc in PyObject_CallMethod (o=0xb74760, name=0x7ffff7a82685 
"load_module", format=0x7ffff7a82567 "s") at ../Objects/abstract.c:2638
#79 0x00007ffff79accc2 in load_module (name=0x7fffffff8bb0 "gi.repository.Gio", 
fp=0x0, pathname=0x7fffffff7ab0 "", type=9, loader=0xb74760)
    at ../Python/import.c:1877
#80 0x00007ffff79aef41 in import_submodule (mod=0x9490c8, subname=0x814e8c 
"Gio", fullname=0x7fffffff8bb0 "gi.repository.Gio") at ../Python/import.c:2595
#81 0x00007ffff79aea1c in ensure_fromlist (mod=0x9490c8, fromlist=0x65a7d0, 
buf=0x7fffffff8bb0 "gi.repository.Gio", buflen=13, recursive=0)
    at ../Python/import.c:2506
#82 0x00007ffff79ad9a0 in import_module_level (name=0x0, globals=0x61fed0, 
locals=0x61fed0, fromlist=0x65a7d0, level=-1) at ../Python/import.c:2174
#83 0x00007ffff79ada89 in PyImport_ImportModuleLevel (name=0x92cd74 
"gi.repository", globals=0x61fed0, locals=0x61fed0, fromlist=0x65a7d0, level=-1)
    at ../Python/import.c:2188
#84 0x00007ffff79766c7 in builtin___import__ (self=0x0, args=0x7561f8, 
kwds=0x0) at ../Python/bltinmodule.c:49
#85 0x00007ffff78e5ef4 in PyCFunction_Call (func=0xa72858, arg=0x7561f8, 
kw=0x0) at ../Objects/methodobject.c:85
#86 0x00007ffff7882182 in PyObject_Call (func=0xa72858, arg=0x7561f8, kw=0x0) 
at ../Objects/abstract.c:2529
#87 0x00007ffff798d4b1 in PyEval_CallObjectWithKeywords (func=0xa72858, 
arg=0x7561f8, kw=0x0) at ../Python/ceval.c:3890
#88 0x00007ffff79872f3 in PyEval_EvalFrameEx (f=0x8c47f0, throwflag=0) at 
../Python/ceval.c:2333
#89 0x00007ffff798b2a9 in PyEval_EvalCodeEx (co=0x740a90, globals=0x61fed0, 
locals=0x61fed0, args=0x0, argcount=0, kws=0x0, kwcount=0, defs=0x0, 
    defcount=0, closure=0x0) at ../Python/ceval.c:3253
#90 0x00007ffff79809f4 in PyEval_EvalCode (co=0x740a90, globals=0x61fed0, 
locals=0x61fed0) at ../Python/ceval.c:667
#91 0x00007ffff79aa0e0 in PyImport_ExecCodeModuleEx (name=0x7fffffffc460 
"test", co=0x740a90, 
    pathname=0x7fffffffa290 
"/media/backup/ostling/tests/embedding_in_c/minimal_python/test.pyc") at 
../Python/import.c:681
#92 0x00007ffff79aadfb in load_source_module (name=0x7fffffffc460 "test", 
    pathname=0x7fffffffa290 
"/media/backup/ostling/tests/embedding_in_c/minimal_python/test.pyc", 
fp=0xabd9f0) at ../Python/import.c:1018
#93 0x00007ffff79acad8 in load_module (name=0x7fffffffc460 "test", fp=0xabd9f0, 
    pathname=0x7fffffffb370 
"/media/backup/ostling/tests/embedding_in_c/minimal_python/test.py", type=1, 
loader=0x0) at ../Python/import.c:1822
#94 0x00007ffff79aef41 in import_submodule (mod=0x7ffff7cde580, 
subname=0x7fffffffc460 "test", fullname=0x7fffffffc460 "test") at 
../Python/import.c:2595
#95 0x00007ffff79ae3ed in load_next (mod=0x7ffff7cde580, altmod=0x7ffff7cde580, 
p_name=0x7fffffffc428, buf=0x7fffffffc460 "test", p_buflen=0x7fffffffc438)
    at ../Python/import.c:2415
#96 0x00007ffff79ad52e in import_module_level (name=0x0, globals=0x621c30, 
locals=0x621c30, fromlist=0x6381c8, level=0) at ../Python/import.c:2136
#97 0x00007ffff79ada89 in PyImport_ImportModuleLevel (name=0x928f14 "test", 
globals=0x621c30, locals=0x621c30, fromlist=0x6381c8, level=0)
    at ../Python/import.c:2188
#98 0x00007ffff79766c7 in builtin___import__ (self=0x0, args=0x6a9570, 
kwds=0x0) at ../Python/bltinmodule.c:49
#99 0x00007ffff78e5ef4 in PyCFunction_Call (func=0xa72858, arg=0x6a9570, 
kw=0x0) at ../Objects/methodobject.c:85
#100 0x00007ffff7882182 in PyObject_Call (func=0xa72858, arg=0x6a9570, kw=0x0) 
at ../Objects/abstract.c:2529
#101 0x00007ffff78822ea in call_function_tail (callable=0xa72858, 
args=0x6a9570) at ../Objects/abstract.c:2561
#102 0x00007ffff788245e in PyObject_CallFunction (callable=0xa72858, 
format=0x7ffff7a82acf "OOOOi") at ../Objects/abstract.c:2585
#103 0x00007ffff79af9b5 in PyImport_Import (module_name=0x928e80) at 
../Python/import.c:2773
#104 0x0000000000400a64 in call_python () at test_embed_python.c:35
#105 0x0000000000400bad in main (argc=1, argv=0x7fffffffd868) at 
test_embed_python.c:57
(gdb) 

// gcc -Wall -g -o test_embed_python test_embed_python.c `pkg-config --cflags --libs python-2.7-dbg`

#include <Python.h>

PyObject *pName, *pModule;

const char *module = "test";

#if PY_VERSION_HEX >= 0x03000000
wchar_t *module_py = L"test.py";
#else
char *module_py = "test.py";
#endif

int call_python(void)
{
#if PY_VERSION_HEX >= 0x03000000
        wchar_t *argv[2] = {module_py, 0};
#else
        char *argv[2] = {module_py, 0};
#endif

        printf("running embedded python...\n");

        Py_Initialize();
        PySys_SetArgv(1, argv);

#if PY_VERSION_HEX >= 0x02060000
        pName = PyUnicode_FromString(module);
#else
        pName = PyString_FromString(module);
#endif
        /* Error checking of pName left out */

        pModule = PyImport_Import(pName);
        Py_DECREF(pName);

        if (pModule == NULL) {
                PyErr_Print();
                fprintf(stderr, "Failed to load \"%s\"\n", module);
                Py_Finalize();
                exit(1);
        }

        Py_DECREF(pModule);

        Py_Finalize();

        printf("...done\n");
        return 0;
}

int main( int argc, char *argv[])
{

        call_python();
        call_python();

	return 0;
}

#from gi.repository import GLib
#from gi.repository import Gtk
#from gi.repository import Cairo
#from gi.repository import Pango
from gi.repository import Gio

def call_python():
    print(" ------------ script end ----------")
    return 0
 
if __name__ == '__main__':
    call_python()

Reply via email to