From: Benjamin Peterson Date: Thu, 20 Dec 2012 17:55:16 +0000 (-0600) Subject: merge 3.3 (#16597) X-Git-Tag: v3.4.0a1~1809 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4c05969fc41d83e7da9ee3a2e15285a60b68ce23;p=python merge 3.3 (#16597) --- 4c05969fc41d83e7da9ee3a2e15285a60b68ce23 diff --cc Modules/_io/bufferedio.c index 432349a7f6,b077f34fff..ea32a5e173 --- a/Modules/_io/bufferedio.c +++ b/Modules/_io/bufferedio.c @@@ -519,11 -519,22 +519,27 @@@ buffered_close(buffered *self, PyObjec res = PyObject_CallMethodObjArgs(self->raw, _PyIO_str_close, NULL); + if (self->buffer) { + PyMem_Free(self->buffer); + self->buffer = NULL; + } + + if (exc != NULL) { + if (res != NULL) { + Py_CLEAR(res); + PyErr_Restore(exc, val, tb); + } + else { + PyObject *val2; + Py_DECREF(exc); + Py_XDECREF(tb); + PyErr_Fetch(&exc, &val2, &tb); + PyErr_NormalizeException(&exc, &val2, &tb); + PyException_SetContext(val2, val); + PyErr_Restore(exc, val2, tb); + } + } + end: LEAVE_BUFFERED(self) return res;