Kaydet (Commit) adf0e437 authored tarafından Guido van Rossum's avatar Guido van Rossum

Trivial little change: when setting a member to an object, hold the

old value in a temporary and XDECREF it only after then new value has
been set.  This prevents the (unlikely) case where the destructor of
the member uses the containing object -- it would find it in an
undefined state.
üst 885215c3
......@@ -167,6 +167,7 @@ PyMember_Set(addr, mlist, name, v)
PyObject *v;
{
struct memberlist *l;
PyObject *oldv;
for (l = mlist; l->name != NULL; l++) {
if (strcmp(l->name, name) == 0) {
......@@ -253,9 +254,10 @@ PyMember_Set(addr, mlist, name, v)
}
break;
case T_OBJECT:
Py_XDECREF(*(PyObject **)addr);
Py_XINCREF(v);
oldv = *(PyObject **)addr;
*(PyObject **)addr = v;
Py_XDECREF(oldv);
break;
case T_CHAR:
if (PyString_Check(v) &&
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment