Issue #19437: Fix _io._IOBase.close(), handle _PyObject_SetAttrId() failure
diff --git a/Modules/_io/iobase.c b/Modules/_io/iobase.c
index b58687e..3da7e5d 100644
--- a/Modules/_io/iobase.c
+++ b/Modules/_io/iobase.c
@@ -186,11 +186,16 @@
         Py_RETURN_NONE;
 
     res = PyObject_CallMethodObjArgs(self, _PyIO_str_flush, NULL);
-    _PyObject_SetAttrId(self, &PyId___IOBase_closed, Py_True);
-    if (res == NULL) {
+
+    if (_PyObject_SetAttrId(self, &PyId___IOBase_closed, Py_True) < 0) {
+        Py_XDECREF(res);
         return NULL;
     }
-    Py_XDECREF(res);
+
+    if (res == NULL)
+        return NULL;
+
+    Py_DECREF(res);
     Py_RETURN_NONE;
 }