`Py_DECREF` seems to be missing in `Java_jep_python_PyObject_setAttr`
CHanzyLazer opened this issue · comments
Describe the bug
Py_DECREF
seems to be missing in Java_jep_python_PyObject_setAttr
, witch will cause memory leak when using setAttr
of PyObject.
To Reproduce
try (SharedInterpreter inter = new SharedInterpreter()) {
inter.exec("class Simple:\n" +
" def __init__(self, id):\n" +
" self.member = None\n"+
" self.id = id\n" +
" def __del__(self):\n" +
" print('obj' + str(self.id) + ' del')"
);
PyCallable simple = inter.getValue("Simple", PyCallable.class);
PyObject obj1 = simple.callAs(PyObject.class, 1);
PyObject obj2 = simple.callAs(PyObject.class, 2);
obj1.setAttr("member", obj2);
}
Output:
obj1 del
So only obj1
was deleted, while obj2
leaked.
Expected behavior
Output:
obj1 del
obj2 del
Both obj1 and obj2 should be deleted.
Thank you very much! I have created a PR with a fix, #539, please review it if you can. I plan to include the fix in the 4.2.1 release of Jep.