Address the residual issue with the fix for SF 551412 in
_PyType_Lookup(). Decided to clear the error condition in the
unfortunate but unlikely case that PyType_Ready() fails.
Will fix in 2.2.x too.
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index af133ea..dd6f1b5 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -1222,8 +1222,18 @@
/* Look in tp_dict of types in MRO */
mro = type->tp_mro;
if (mro == NULL) {
- if (PyType_Ready(type) < 0)
+ if (PyType_Ready(type) < 0) {
+ /* It's not ideal to clear the error condition,
+ but this function is documented as not setting
+ an exception, and I don't want to change that.
+ When PyType_Ready() can't proceed, it won't
+ set the "ready" flag, so future attempts to ready
+ the same type will call it again -- hopefully
+ in a context that propagates the exception out.
+ */
+ PyErr_Clear();
return NULL;
+ }
mro = type->tp_mro;
assert(mro != NULL);
}