Browse Source

Merged in cwalther/cwe (pull request #2)

gotopage
rarified 13 years ago
parent
commit
d5f6827419
  1. 18
      MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/plPythonSDLModifier.cpp

18
MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/FeatureLib/pfPython/plPythonSDLModifier.cpp

@ -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

Loading…
Cancel
Save