[PyQt] SIGSEGV when calling the ( virtual ) python subclass method

Alessandro Pasotti apasotti at gmail.com
Tue Oct 7 18:18:21 BST 2014


Hi,

stuck again on my QGIS server bindings, now getting hard-to-debug segfaults.


I've rewritten the base QgsServerFilter class with virtual methods:
https://github.com/elpaso/QGIS/blob/serverplugins-iface/src/mapserver/qgsserverfilter.h

 and updated the sip file:
https://github.com/elpaso/QGIS/blob/serverplugins-iface/python/server/qgsserverfilter.sip

The QgsServerFilter filters are added to a QMultiMap
https://github.com/elpaso/QGIS/blob/serverplugins-iface/src/mapserver/qgsserverinterfaceimpl.cpp#L42

and then the methods are called in the main application loop (segfault
is here!):
https://github.com/elpaso/QGIS/blob/serverplugins-iface/src/mapserver/qgis_map_serv.cpp#L374

The simple python code I'm using for testing is here:
https://dpaste.de/MjQ0

I noticed that when I add the QgsServerFilter object the vtable is ok
(points to <vtable for sipQgsServerFilter+16>) but when the method is
called in the loop, the vtable is corrupted (the debugger only shows
addresses and no text descriptions for the functions) and immediately
segfaults.

Any hint about how to debug this?

PS: running on ubuntu 14.04

-- Found Qt version: 4.8.6
-- Pedantic compiler settings enabled
-- Debug output enabled
-- Found Python executable: /usr/bin/python
-- Found Python version: 2.7.6
-- Found Python library: /usr/lib/x86_64-linux-gnu/libpython2.7.so
-- Found SIP version: 4.15.5


-- 
Alessandro Pasotti
w3:   www.itopen.it


More information about the PyQt mailing list