chiark / gitweb /
peerdb/tripe-newpeers.in (ConfigSection.items): Push more cautiously.
[tripe] / peerdb / tripe-newpeers.in
index 4b9fe1f892048ea2a182ceffa8e2400428e4ece5..fdb91708a42105a7aa6b01efc3bd189b322a5d7a 100644 (file)
@@ -310,23 +310,23 @@ class ConfigSection (object):
     """
 
     ## Initialize for a depth-first walk of the inheritance graph.
-    d = {}
-    visited = {}
+    seen = {}
+    visiting = { me.name: True }
     stack = [me]
 
     ## Visit nodes, collecting their keys.  Don't believe the values:
     ## resolving inheritance is too hard to do like this.
     while stack:
       sec = stack.pop()
-      if sec.name in visited: continue
-      visited[sec.name] = True
-      stack += sec._parents()
+      for p in sec._parents():
+        if p.name not in visiting:
+          stack.append(p); visiting[p.name] = True
 
       for key in sec._itemmap.iterkeys():
-        if key != '@inherit': d[key] = None
+        if key != '@inherit': seen[key] = None
 
     ## And we're done.
-    return d.iterkeys()
+    return seen.iterkeys()
 
 class MyConfigParser (object):
   """