From: Guido van Rossum Date: Mon, 3 Jun 2002 19:54:10 +0000 (+0000) Subject: Backport to 2.2.x: X-Git-Tag: v2.2.2b1~344 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5991f6522a83ef331390c22a6d5a802a16abbb4c;p=thirdparty%2FPython%2Fcpython.git Backport to 2.2.x: 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. --- diff --git a/Objects/typeobject.c b/Objects/typeobject.c index f5a1a01a49af..c2264541cec8 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -1219,8 +1219,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); }