From: Guido van Rossum Date: Mon, 3 Jun 2002 19:52:41 +0000 (+0000) Subject: Address the residual issue with the fix for SF 551412 in X-Git-Tag: v2.3c1~5497 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b65c65b301203b2acb0b8e1b2f45d8b5079ce5fd;p=python 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 af133eadc2..dd6f1b5d5c 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -1222,8 +1222,18 @@ _PyType_Lookup(PyTypeObject *type, PyObject *name) /* 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); }