PyAPI: fix memory leaks in dictionary assignment
Thanks to Kévin Dietrich for spotting driver leak, checked other uses of PyDict_SetItem and found more.
This commit is contained in:
@@ -113,11 +113,15 @@ PyObject *SCA_PythonKeyboard::pyattr_get_events(void *self_v, const KX_PYATTRIBU
|
||||
{
|
||||
SCA_PythonKeyboard* self = static_cast<SCA_PythonKeyboard*>(self_v);
|
||||
|
||||
for (int i=SCA_IInputDevice::KX_BEGINKEY; i<=SCA_IInputDevice::KX_ENDKEY; i++)
|
||||
{
|
||||
for (int i = SCA_IInputDevice::KX_BEGINKEY; i <= SCA_IInputDevice::KX_ENDKEY; i++) {
|
||||
const SCA_InputEvent & inevent = self->m_keyboard->GetEventValue((SCA_IInputDevice::KX_EnumInputs)i);
|
||||
|
||||
PyDict_SetItem(self->m_event_dict, PyLong_FromLong(i), PyLong_FromLong(inevent.m_status));
|
||||
PyObject *key = PyLong_FromLong(i);
|
||||
PyObject *value = PyLong_FromLong(inevent.m_status);
|
||||
|
||||
PyDict_SetItem(self->m_event_dict, key, value);
|
||||
|
||||
Py_DECREF(key);
|
||||
Py_DECREF(value);
|
||||
}
|
||||
Py_INCREF(self->m_event_dict);
|
||||
return self->m_event_dict;
|
||||
@@ -129,12 +133,18 @@ PyObject *SCA_PythonKeyboard::pyattr_get_active_events(void *self_v, const KX_PY
|
||||
|
||||
PyDict_Clear(self->m_event_dict);
|
||||
|
||||
for (int i=SCA_IInputDevice::KX_BEGINKEY; i<=SCA_IInputDevice::KX_ENDKEY; i++)
|
||||
{
|
||||
for (int i = SCA_IInputDevice::KX_BEGINKEY; i <= SCA_IInputDevice::KX_ENDKEY; i++) {
|
||||
const SCA_InputEvent & inevent = self->m_keyboard->GetEventValue((SCA_IInputDevice::KX_EnumInputs)i);
|
||||
|
||||
if (inevent.m_status != SCA_InputEvent::KX_NO_INPUTSTATUS)
|
||||
PyDict_SetItem(self->m_event_dict, PyLong_FromLong(i), PyLong_FromLong(inevent.m_status));
|
||||
if (inevent.m_status != SCA_InputEvent::KX_NO_INPUTSTATUS) {
|
||||
PyObject *key = PyLong_FromLong(i);
|
||||
PyObject *value = PyLong_FromLong(inevent.m_status);
|
||||
|
||||
PyDict_SetItem(self->m_event_dict, key, value);
|
||||
|
||||
Py_DECREF(key);
|
||||
Py_DECREF(value);
|
||||
}
|
||||
}
|
||||
Py_INCREF(self->m_event_dict);
|
||||
return self->m_event_dict;
|
||||
|
||||
Reference in New Issue
Block a user