[PyQt] Help understanding a backtrace

Phil Thompson phil at riverbankcomputing.com
Thu Jan 26 15:15:31 GMT 2012


On Thu, 26 Jan 2012 17:59:57 +0530, Kovid Goyal <kovid at kovidgoyal.net>
wrote:
> It's been a week and I have had no crashes since reverting sip to
revision
> 1027. While that is by no means conclusive proof of a bug, it is highly
> suggestive. Is there some extra instrumentation I can add to SIP to
narrow
> down
> the cause?

Can you go back to the current version of SIP...

>> I've recently started getting random segfaults in calibre on my dev
>> machine
>> (linux 64bit sip-4.13.1 and PyQt4-4.9). I compiled everything with
-ggdb
>> and
>> generated the following backtrace from a core dump (Only kept the top
15
>> calls)
>> 
>> #0  removeFromParent (self=0x5f66cc0) at siplib.c:5265
>> #1  0x00007f6774aa4061 in sip_api_common_dtor (sipSelf=0x5f66cc0) at
>> siplib.c:5183
>> #2  0x00007f6774aa76d0 in add_object (om=<optimized out>,
>> addr=0x2f0e740, val=0x5ce39f0) at objmap.c:269
>> #3  0x00007f6774aa7a6a in sipOMAddObject (om=0x7f6774caf980,
>> val=0x5ce39f0) at objmap.c:163
>> #4  0x00007f6774aa08bd in sipSimpleWrapper_init (self=0x5ce39f0,
>> args=0x7f675403a150, kwds=0x0) at siplib.c:9149
>> #5  0x00007f677c34b9f8 in type_call (type=<optimized out>,
>> args=0x7f675403a150, kwds=0x0) at Objects/typeobject.c:737
>> #6  0x00007f677c2f65d3 in PyObject_Call (func=0xba2c60, arg=<optimized
>> out>, kw=<optimized out>) at Objects/abstract.c:2529

Can you determine what call this is? It will either be creating a Qt
object or it will be wrapping a Qt object returned from a call to a Qt
method.

>> #7  0x00007f6779ef9a08 in imap_next (lz=0x5ccfe50) at
>>
/var/tmp/portage/dev-lang/python-2.7.2-r3/work/Python-2.7.2/Modules/itertoolsmodule.c:1549
>> #8  0x00007f677c321b96 in listextend (self=0x5ccb368, b=<optimized
out>)
>> at Objects/listobject.c:872
>> #9  0x00007f677c321e18 in list_init (self=0x5ccb368, args=<optimized
>> out>, kw=<optimized out>) at Objects/listobject.c:2458
>> #10 0x00007f677c34b9f8 in type_call (type=<optimized out>,
>> args=0x7f675403a750, kwds=0x0) at Objects/typeobject.c:737
>> #11 0x00007f677c2f65d3 in PyObject_Call (func=0x7f677c6340e0,
>> arg=<optimized out>, kw=<optimized out>) at Objects/abstract.c:2529
>> #12 0x00007f677c38e23d in do_call (nk=<optimized out>, na=<optimized
>> out>, pp_stack=0x7fff9424b6e8, func=0x7f677c6340e0) at
>> Python/ceval.c:4231
>> #13 call_function (oparg=<optimized out>, pp_stack=0x7fff9424b6e8) at
>> Python/ceval.c:4036
>> #14 PyEval_EvalFrameEx (f=<optimized out>, throwflag=<optimized out>)
at
>> Python/ceval.c:2666
>> ......<snipped some noise>

Then can you try the following change to add_object() in objmap.c...

        if (!(val->flags & SIP_SHARE_MAP))

...to...

        if (!(val->flags & (SIP_SHARE_MAP | SIP_ALIAS)))

...to see if it helps.

Thanks,
Phil


More information about the PyQt mailing list