Rev 144: one more fix needed for bug #586122. in http://bazaar.launchpad.net/~jameinel/meliae/skip_static_type_traverse_bug_586122

John Arbash Meinel john at arbash-meinel.com
Wed Jun 30 19:06:13 BST 2010


At http://bazaar.launchpad.net/~jameinel/meliae/skip_static_type_traverse_bug_586122

------------------------------------------------------------
revno: 144
revision-id: john at arbash-meinel.com-20100630180555-6b373fu7aamk9t8a
parent: john at arbash-meinel.com-20100614205129-lhrl4ffflf3x9rfy
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: skip_static_type_traverse_bug_586122
timestamp: Wed 2010-06-30 13:05:55 -0500
message:
  one more fix needed for bug #586122.
  
  The dump routine wasn't calling tp_traverse, but the get_referents one was.
  I went a step further, though, and check whether the function is exactly the
  one from PyType_Type. We may eventually need some sort of PyType_Check or
  something like that, but this passes the basic tests for Max Kanat-Alexander.
-------------- next part --------------
=== modified file 'meliae/_scanner_core.c'
--- a/meliae/_scanner_core.c	2010-06-14 20:51:29 +0000
+++ b/meliae/_scanner_core.c	2010-06-30 18:05:55 +0000
@@ -476,7 +476,7 @@
     _write_static_to_info(info, ", \"refs\": [");
     do_traverse = 1;
     if (Py_TYPE(c_obj)->tp_traverse == NULL
-        || (Py_TYPE(c_obj) == &PyType_Type
+        || (Py_TYPE(c_obj)->tp_traverse == PyType_Type.tp_traverse
             && !PyType_HasFeature((PyTypeObject*)c_obj, Py_TPFLAGS_HEAPTYPE)))
     {
         /* Obviously we don't traverse if there is no traverse function. But
@@ -529,7 +529,10 @@
     if (lst == NULL) {
         return NULL;
     }
-    if (Py_TYPE(c_obj)->tp_traverse != NULL) {
+    if (Py_TYPE(c_obj)->tp_traverse != NULL
+        && (Py_TYPE(c_obj)->tp_traverse != PyType_Type.tp_traverse
+            || PyType_HasFeature((PyTypeObject *)c_obj, Py_TPFLAGS_HEAPTYPE)))
+    {
         Py_TYPE(c_obj)->tp_traverse(c_obj, _append_object, lst);
     }
     return lst;



More information about the bazaar-commits mailing list