mirror of
https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git
synced 2025-07-14 02:27:40 -04:00
Christian Walther's Python SDL fixes - for real this time.
This commit is contained in:
@ -208,6 +208,22 @@ void plPythonSDLModifier::SetItemIdx(const char* key, int idx, PyObject* value,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pyTuple && pyTuple->ob_refcnt != 1)
|
||||||
|
{
|
||||||
|
// others already have references to the tuple and expect it to be immutable, must make a copy
|
||||||
|
int n = PyTuple_Size(pyTuple);
|
||||||
|
PyObject* newTuple = PyTuple_New(n);
|
||||||
|
for (int j = 0; j < n; j++)
|
||||||
|
{
|
||||||
|
PyObject* item = PyTuple_GetItem(pyTuple, j);
|
||||||
|
Py_INCREF(item);
|
||||||
|
PyTuple_SetItem(newTuple, j, item);
|
||||||
|
}
|
||||||
|
Py_DECREF(pyTuple);
|
||||||
|
pyTuple = newTuple;
|
||||||
|
it->second.obj = newTuple;
|
||||||
|
}
|
||||||
|
|
||||||
if (pyTuple)
|
if (pyTuple)
|
||||||
{
|
{
|
||||||
if (PyTuple_Size(pyTuple) <= idx)
|
if (PyTuple_Size(pyTuple) <= idx)
|
||||||
@ -221,6 +237,8 @@ void plPythonSDLModifier::SetItemIdx(const char* key, int idx, PyObject* value,
|
|||||||
Py_INCREF(Py_None);
|
Py_INCREF(Py_None);
|
||||||
PyTuple_SetItem(pyTuple, j, Py_None);
|
PyTuple_SetItem(pyTuple, j, Py_None);
|
||||||
}
|
}
|
||||||
|
// _PyTuple_Resize may have changed pyTuple
|
||||||
|
it->second.obj = pyTuple;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
Reference in New Issue
Block a user