[pypy-svn] r27344 - in pypy/dist/pypy/rpython/memory: . test

arigo at codespeak.net arigo at codespeak.net
Wed May 17 13:21:53 CEST 2006


Author: arigo
Date: Wed May 17 13:21:52 2006
New Revision: 27344

Modified:
   pypy/dist/pypy/rpython/memory/gc.py
   pypy/dist/pypy/rpython/memory/support.py
   pypy/dist/pypy/rpython/memory/test/test_support.py
Log:
Leak!  One chunk per AddressLinkedList was never freed.


Modified: pypy/dist/pypy/rpython/memory/gc.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/gc.py	(original)
+++ pypy/dist/pypy/rpython/memory/gc.py	Wed May 17 13:21:52 2006
@@ -223,7 +223,7 @@
                         j += 1
                     i += 1
             hdr.typeid = hdr.typeid | 1
-        free_non_gc_object(objects)
+        objects.delete()
         newmo = self.AddressLinkedList()
         curr_heap_size = 0
         freed_size = 0
@@ -245,7 +245,7 @@
             else:
                 freed_size += estimate
                 raw_free(curr)
-        free_non_gc_object(self.malloced_objects)
+        self.malloced_objects.delete()
         self.malloced_objects = newmo
         if curr_heap_size > self.bytes_malloced_threshold:
             self.bytes_malloced_threshold = curr_heap_size
@@ -483,7 +483,7 @@
             typeid = (deallocate - self.size_gc_header()).signed[1]
             (deallocate - self.size_gc_header()).signed[1] = -typeid - 1
             self.deallocate(deallocate)
-        free_non_gc_object(dealloc_list)
+        dealloc_list.delete()
         while 1:
             root = roots.pop()
             if root == NULL:

Modified: pypy/dist/pypy/rpython/memory/support.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/support.py	(original)
+++ pypy/dist/pypy/rpython/memory/support.py	Wed May 17 13:21:52 2006
@@ -1,5 +1,6 @@
 from pypy.rpython.lltypesystem import lltype, llmemory
 from pypy.rpython.memory.lltypelayout import sizeof
+from pypy.rpython.objectmodel import free_non_gc_object
 
 INT_SIZE = sizeof(lltype.Signed)
 
@@ -69,13 +70,12 @@
             self.chunk.length = used_chunks - 1
             return result
 
-        def free(self):   # XXX very inefficient
+        def delete(self):
             cur = self.chunk
-            while cur.previous:
+            while cur:
                 prev = cur.previous
                 unused_chunks.put(cur)
                 cur = prev
-            self.chunk = cur
-            cur.length =  0
+            free_non_gc_object(self)
 
     return AddressLinkedList

Modified: pypy/dist/pypy/rpython/memory/test/test_support.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/test/test_support.py	(original)
+++ pypy/dist/pypy/rpython/memory/test/test_support.py	Wed May 17 13:21:52 2006
@@ -22,14 +22,12 @@
         assert ll.pop() == NULL
         assert ll.pop() == NULL
         ll.append(addr)
-        ll.free()
-        free_non_gc_object(ll)
+        ll.delete()
         ll = AddressLinkedList()
         ll.append(addr)
         ll.append(addr + 1)
         ll.append(addr + 2)
-        ll.free()
-        free_non_gc_object(ll)
+        ll.delete()
         raw_free(addr)
 
     def test_big_access(self):
@@ -49,8 +47,7 @@
         for i in range(3000)[::-1]:
             a = ll.pop()
             assert a - addr == i
-        ll.free()
-        free_non_gc_object(ll)
+        ll.delete()
         raw_free(addr)
         
 def test_linked_list_annotate():
@@ -81,14 +78,12 @@
         for i in range(299, -1, -1):
             a = ll.pop()
             res = res and (a - INT_SIZE*i == addr)
-        ll.free()
-        free_non_gc_object(ll)
+        ll.delete()
         ll = AddressLinkedList()
         ll.append(addr)
         ll.append(addr + INT_SIZE*1)
         ll.append(addr + INT_SIZE*2)
-        ll.free()
-        free_non_gc_object(ll)
+        ll.delete()
         raw_free(addr)
         return res
 



More information about the Pypy-commit mailing list