blob: 4f2d0a25070119a35613230ef30e827cb6345322 [file] [log] [blame]
#include <torch/csrc/utils/pyobject_preservation.h>
#include <structmember.h>
void clear_slots(PyTypeObject* type, PyObject* self) {
Py_ssize_t n = Py_SIZE(type);
PyMemberDef* mp = type->tp_members;
for (Py_ssize_t i = 0; i < n; i++, mp++) {
if (mp->type == T_OBJECT_EX && !(mp->flags & READONLY)) {
char* addr = (char*)self + mp->offset;
PyObject* obj = *(PyObject**)addr;
if (obj != nullptr) {
*(PyObject**)addr = nullptr;
Py_DECREF(obj);
}
}
}
}