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