diff --git a/linux-ramdump-parser-v2/rb_tree.py b/linux-ramdump-parser-v2/rb_tree.py
index 8a6732616b8faf37dbfb46c751457631c6ccd144..b7a5d3387746ce33eaf0682f288ee92608a1be0d 100644
--- a/linux-ramdump-parser-v2/rb_tree.py
+++ b/linux-ramdump-parser-v2/rb_tree.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
+# Copyright (c) 2012-2014, The Linux Foundation. All rights reserved.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License version 2 and
@@ -30,14 +30,21 @@ class RbTreeWalker(object):
         self.left_offset = self.ram_dump.field_offset(
             'struct rb_node', 'rb_left')
 
-    def walk(self, node, func):
+    def _walk(self, node, func, seen):
         if node != 0:
             left_node_addr = node + self.left_offset
             left_node = self.ram_dump.read_word(left_node_addr)
-            self.walk(left_node, func)
+            if left_node not in seen:
+                seen.append(left_node)
+                self._walk(left_node, func, seen)
 
             func(node)
 
             right_node_addr = node + self.right_offset
             right_node = self.ram_dump.read_word(right_node_addr)
-            self.walk(right_node, func)
+            if right_node not in seen:
+                seen.append(right_node)
+                self._walk(right_node, func, seen)
+
+    def walk(self, node, func):
+        self._walk(node, func, [])