Hi,
I'm seeing crashes like this with pyclutter:
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1210283840 (LWP 24571)]
pyclutter_callback_new (func=0x85f0e64, data=0x8075a7d, n_params=1,
param_types=0xbff462a0) at pyclutter.c:33
33 Py_INCREF (retval->data);
(gdb) bt
#0 pyclutter_callback_new (func=0x85f0e64, data=0x8075a7d,
n_params=1, param_types=0xbff462a0) at pyclutter.c:33
#1 0xb7b7311d in _wrap_clutter_effect_move (self=0x0, args=0x851de6c,
kwargs=0x0) at clutter-effect.override:207
#2 0x080c8eec in PyEval_EvalFrameEx (f=0x8df5c0c, throwflag=0) at
../Python/ceval.c:3564
#3 0x080ca115 in PyEval_EvalCodeEx (co=0x8591f98, globals=0x85f10b4,
locals=0x0, args=0xb7d64470, argcount=4, kws=0x0, kwcount=0,
defs=0x85ebd18, defcount=1, closure=0x0) at ../Python/ceval.c:2831
#4 0x081123e1 in function_call (func=0x8599a04, arg=0xb7d64464,
kw=0x0) at ../Objects/funcobject.c:517
#5 0x0805c9e7 in PyObject_Call (func=0x207f8, arg=0xb7d64464, kw=0x0)
at ../Objects/abstract.c:1860
#6 0x080c709f in PyEval_EvalFrameEx (f=0x8dfd2bc, throwflag=0) at
../Python/ceval.c:3844
#7 0x080ca115 in PyEval_EvalCodeEx (co=0x82b5650, globals=0x85f102c,
locals=0x0, args=0x85f4618, argcount=2, kws=0x0, kwcount=0, defs=0x0,
defcount=0, closure=0x85f3d2c) at ../Python/ceval.c:2831
#8 0x081123e1 in function_call (func=0x85f2e64, arg=0x85f460c,
kw=0x0) at ../Objects/funcobject.c:517
#9 0x0805c9e7 in PyObject_Call (func=0x207f8, arg=0x85f460c, kw=0x0)
at ../Objects/abstract.c:1860
#10 0x080c232c in PyEval_CallObjectWithKeywords (func=0x85f2e64,
arg=0x85f460c, kw=0x0) at ../Python/ceval.c:3433
#11 0x0805cc00 in PyObject_CallObject (o=0x85f2e64, a=0x85f460c) at
../Objects/abstract.c:1851
#12 0xb7cf7607 in ?? () from
/var/lib/python-support/python2.5/gtk-2.0/gobject/_gobject.so
#13 0x085f2e64 in ?? ()
#14 0x085f460c in ?? ()
#15 0xb7d887d0 in ?? ()
#16 0x00100002 in ?? ()
#17 0x00000006 in ?? ()
#18 0x00000000 in ?? ()
(gdb) p *retval->data
$1 = {ob_refcnt = -1031159675, ob_type = 0x44a14474}
In this particular case I was calling clutter.effect_move() without
optional arguments.
Whether it leads to crash seems to depend on the circumstances. For example
adding print statement before the call works around the problem.
It seems that the optional arguments are not generally initialized before
calling PyArg_Parse* functions. Is this intentional? Following
change seems to fix
this particular problem:
--- pyclutter/clutter/clutter-effect.override.orig 2008-02-02
12:05:57.000000000 +0200
+++ pyclutter/clutter/clutter-effect.override 2008-02-02
12:04:12.000000000 +0200
@@ -170,7 +170,7 @@
PyObject *kwargs)
{
static char *kwlist[] = { "template", "actor", "x", "y", "func",
"data", NULL };
- PyObject *py_templ, *py_actor, *py_func, *py_data;
+ PyObject *py_templ, *py_actor, *py_func, *py_data = Py_None;
ClutterEffectTemplate *templ;
ClutterActor *actor;
gint x, y;
--
Tero
--
To unsubscribe send a mail to [EMAIL PROTECTED]