X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/4ea3e16caea18f079d66b387d000d9ba2db8fd1b..7d7ca8ee2eaae704989a1552ad429794d402f550:/lib/python/python.cpp diff --git a/lib/python/python.cpp b/lib/python/python.cpp index 119bff1c..2636a3d5 100644 --- a/lib/python/python.cpp +++ b/lib/python/python.cpp @@ -1,4 +1,3 @@ -#include #include /* avoid warnigs :) */ #undef _POSIX_C_SOURCE @@ -8,6 +7,44 @@ extern "C" void init_enigma(); extern void bsodFatal(); +void Impl_Py_DECREF(const char* file, int line, PyObject *obj) +{ + if (!obj) + { + eDebug("decref python object null pointer %s %d!!!", + file, line); + bsodFatal(); + } + if (obj->ob_refcnt <= 0) + { + eDebug("decref python object with refcounting value %d (%s %d)!!!", obj->ob_refcnt, file, line); + bsodFatal(); + } + Py_DECREF(obj); +} + +void Impl_Py_INCREF(const char* file, int line, PyObject *obj) +{ + if (!obj) + { + eDebug("incref python object null pointer %s %d!!!", file, line); + bsodFatal(); + } + if (obj->ob_refcnt <= 0) + { + eDebug("incref python object with refcounting value %d (%s %d)!!!", obj->ob_refcnt, file, line); + bsodFatal(); + } + if (obj->ob_refcnt == 0x7FFFFFFF) + { + eDebug("incref python object with refcounting value %d (MAX_INT!!!) (%s %d)!!!", obj->ob_refcnt, file, line); + bsodFatal(); + } + Py_INCREF(obj); +} + +#include + DEFINE_REF(TestObj); TestObj::TestObj()