[PyQt] ANN: MetaSIP v1.0 Released

Shaheed Haque srhaque at theiet.org
Mon Oct 8 21:53:40 BST 2012


Hi,

I managed to generate a set of SIP files which compile and link
without errors, but when I try to actually instantiate one of the
objects (actually, it is a a widget from the Okteta library), I end up
crashing in siplib.c like this:

5502    in /build/buildd/sip4-4.13.3/siplib/siplib.c
(gdb)

Program received signal SIGSEGV, Segmentation fault.
createClassType (client=client at entry=0x7fffdd5adcc0
<sipModuleAPI_okteta>, ctd=ctd at entry=
    0x7fffdd5b1e40 <sipTypeDef_okteta_Okteta_Character>,
mod_dict=mod_dict at entry=
    {'__name__': 'PyOkteta4.okteta', 'Okteta': <sip.wrappertype at
remote 0x14ec480>, '__doc__': None, '__package__': None})
    at /build/buildd/sip4-4.13.3/siplib/siplib.c:5502
5502    in /build/buildd/sip4-4.13.3/siplib/siplib.c
(gdb)

Looking at the source code, we are in this loop:

  5488         for (sup = ctd->ctd_supers, i = 0; i < nrsupers; ++i, ++sup)
  5489         {
  5490             PyObject *st;
  5491             sipTypeDef *sup_td = getGeneratedType(sup, client);
  5492
  5493             /*
  5494              * Initialise the super-class if necessary.  It
will always be in
  5495              * the same module if it needs doing.
  5496              */
  5497             if (createClassType(client, (sipClassTypeDef
*)sup_td, mod_dict) < 0)
  5498                 goto relbases;
  5499
  5500             st = (PyObject *)sipTypeAsPyTypeObject(sup_td);
  5501
  5502             Py_INCREF(st);
  5503             PyTuple_SET_ITEM(bases, i, st);
  5504         }

Now, i'm a bit out of my comfort zone here ;-), but "st" is NULL and
the immediate cause of the crash, and looking back nrsupers should be
3 because:

(gdb) p ctd.ctd_supers[0]
$86 = {
  sc_type = 24,
  sc_module = 0,
  sc_flag = 1
}
(gdb) p ctd.ctd_supers[1]
$87 = {
  sc_type = 65535,
  sc_module = 255,
  sc_flag = 1
}
(gdb) p ctd.ctd_supers[2]
$88 = {
  sc_type = 0,
  sc_module = 0,
  sc_flag = 0
}
(gdb) p ctd.ctd_supers @ 3
$95 = {0x7fffdd5ad41c <supers_Okteta_Character>, 0x0,
    0x7fffdd3797b0 <init_Okteta_Character(sipSimpleWrapper*,
PyObject*, PyObject*, PyObject**, PyObject**, PyObject**)>}

I'm guessing I've screwed up the bindings in some way to do with the
superclasses of Character, but since that is simply QChar, I'm not
sure what to look at next. Reproduction just requires to try and add
an Okteta::ByteArrayColumnView using designer, but I am guessing that
the error is a very basic one on my part. Any nudges/hints much
appreciated!

Thanks, Shaheed

P.S. The .msp file and the generated .sip files can be found at:

http://quickgit.kde.org/index.php?p=kate.git&a=tree&hb=31e3a2c995e9981e8cdf40b4973aedd1f39d893c&h=d15d85b0b1843713b0d591a611a8840c81feba12&f=kate%2Fplugins%2Fpate%2Fsrc%2Fsip


More information about the PyQt mailing list