Kaydet (Commit) 2b2b7537 authored tarafından Raymond Hettinger's avatar Raymond Hettinger

Prevent reentrant badness by deferring the decrefs as long as possible.

üst e989bf58
...@@ -419,9 +419,11 @@ deque_extend(dequeobject *deque, PyObject *iterable) ...@@ -419,9 +419,11 @@ deque_extend(dequeobject *deque, PyObject *iterable)
deque->rightblock->data[deque->rightindex] = item; deque->rightblock->data[deque->rightindex] = item;
deque_trim_left(deque); deque_trim_left(deque);
} }
Py_DECREF(it); if (PyErr_Occurred()) {
if (PyErr_Occurred()) Py_DECREF(it);
return NULL; return NULL;
}
Py_DECREF(it);
Py_RETURN_NONE; Py_RETURN_NONE;
} }
...@@ -480,9 +482,11 @@ deque_extendleft(dequeobject *deque, PyObject *iterable) ...@@ -480,9 +482,11 @@ deque_extendleft(dequeobject *deque, PyObject *iterable)
deque->leftblock->data[deque->leftindex] = item; deque->leftblock->data[deque->leftindex] = item;
deque_trim_right(deque); deque_trim_right(deque);
} }
Py_DECREF(it); if (PyErr_Occurred()) {
if (PyErr_Occurred()) Py_DECREF(it);
return NULL; return NULL;
}
Py_DECREF(it);
Py_RETURN_NONE; Py_RETURN_NONE;
} }
...@@ -497,8 +501,8 @@ deque_inplace_concat(dequeobject *deque, PyObject *other) ...@@ -497,8 +501,8 @@ deque_inplace_concat(dequeobject *deque, PyObject *other)
result = deque_extend(deque, other); result = deque_extend(deque, other);
if (result == NULL) if (result == NULL)
return result; return result;
Py_DECREF(result);
Py_INCREF(deque); Py_INCREF(deque);
Py_DECREF(result);
return (PyObject *)deque; return (PyObject *)deque;
} }
...@@ -1260,8 +1264,8 @@ deque_repr(PyObject *deque) ...@@ -1260,8 +1264,8 @@ deque_repr(PyObject *deque)
aslist, ((dequeobject *)deque)->maxlen); aslist, ((dequeobject *)deque)->maxlen);
else else
result = PyUnicode_FromFormat("deque(%R)", aslist); result = PyUnicode_FromFormat("deque(%R)", aslist);
Py_DECREF(aslist);
Py_ReprLeave(deque); Py_ReprLeave(deque);
Py_DECREF(aslist);
return result; return result;
} }
......
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