Wed, 31 Jan 2018 (NZDT) While working on test/v3 for sctp.c, test-icmp.py failed. Noticed the following in pltmodule.c from 24 Jan 2018: In plt_new_object: DataObject *d = (DataObject *)py_type->tp_alloc(py_type, 0); d->type = type; d->kind = kind; d->data = data; d->mom = mom; Py_INCREF(mom); d->mom = mom; if (mom == Py_None) Py_INCREF(mom); /* Class attribute functions are called via a _getseters struct, that increments Py_REFCNT for the object itself, i.e. in them 'self' has a borrowed reference. We must not Py_INCREF(self) from them! However, most - if not all - such functions pass PyNone as mom, we need to Py_INCREF(PyNone) 18 Sep 2017 (NZST) */ d->l2p = l2p; d->l2_rem = l2_rem; Remembered that this problem went away if d->mom was set to PyNone. (1): the d->mom = mom; lines are redundant (2): the second PyINCREF(mom) only increments for PyNone, which is silly! Deleted the second d->mom line (it doesn't matter if we PyINCR(PyNone), it gets PyDECREFed in pltData_dealloc() Deleted the above comment. Checked that we never PyINCR(self) - we don't. After all that, all 34 of the test programs work properly, on pyv2 and v3.