]> granicus.if.org Git - python/commitdiff
Address the residual issue with the fix for SF 551412 in
authorGuido van Rossum <guido@python.org>
Mon, 3 Jun 2002 19:52:41 +0000 (19:52 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 3 Jun 2002 19:52:41 +0000 (19:52 +0000)
_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.

Objects/typeobject.c

index af133eadc2f9aefb76fbfde84802a2ce6f9e0aac..dd6f1b5d5cfa1e9c88704b6a9d290090ab695a58 100644 (file)
@@ -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);
        }