[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