From 7665be6087d879a96c4238684b2dfc642c67e60c Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Tue, 24 Mar 2015 23:21:57 +0200 Subject: Issue #21802: The reader in BufferedRWPair now is closed even when closing writer failed in BufferedRWPair.close(). --- Modules/_io/bufferedio.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'Modules/_io/bufferedio.c') diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c index 02cf038d67..445c8708ad 100644 --- a/Modules/_io/bufferedio.c +++ b/Modules/_io/bufferedio.c @@ -2365,12 +2365,18 @@ bufferedrwpair_writable(rwpair *self, PyObject *args) static PyObject * bufferedrwpair_close(rwpair *self, PyObject *args) { + PyObject *exc = NULL, *val, *tb; PyObject *ret = _forward_call(self->writer, &PyId_close, args); if (ret == NULL) - return NULL; - Py_DECREF(ret); - - return _forward_call(self->reader, &PyId_close, args); + PyErr_Fetch(&exc, &val, &tb); + else + Py_DECREF(ret); + ret = _forward_call(self->reader, &PyId_close, args); + if (exc != NULL) { + _PyErr_ChainExceptions(exc, val, tb); + Py_CLEAR(ret); + } + return ret; } static PyObject * -- cgit v1.2.1