Author: Armin Rigo <[email protected]>
Branch: array-overallocation-in-nursery
Changeset: r67812:d0b26d48adbf
Date: 2013-11-03 13:24 +0100
http://bitbucket.org/pypy/pypy/changeset/d0b26d48adbf/
Log: Apply the diff of incminimark.py to minimark.py.
diff --git a/rpython/memory/gc/minimark.py b/rpython/memory/gc/minimark.py
--- a/rpython/memory/gc/minimark.py
+++ b/rpython/memory/gc/minimark.py
@@ -1355,8 +1355,8 @@
# Get the number of card marker bytes in the header.
typeid = self.get_type_id(obj)
offset_to_length = self.varsize_offset_to_length(typeid)
- length = (obj + offset_to_length).signed[0]
- bytes = self.card_marking_bytes_for_length(length)
+ allocated_length = (obj + offset_to_length).signed[0]
+ bytes = self.card_marking_bytes_for_length(allocated_length)
p = llarena.getfakearenaaddress(obj - size_gc_header)
#
# If the object doesn't have GCFLAG_TRACK_YOUNG_PTRS, then it
@@ -1374,6 +1374,9 @@
else:
# Walk the bytes encoding the card marker bits, and for
# each bit set, call trace_and_drag_out_of_nursery_partial().
+ offset_to_used_length = self.varsize_offset_to_used_length(
+ typeid)
+ used_length = (obj + offset_to_used_length).signed[0]
interval_start = 0
while bytes > 0:
p -= 1
@@ -1386,10 +1389,10 @@
interval_stop = interval_start + self.card_page_indices
#
if cardbyte & 1:
- if interval_stop > length:
- interval_stop = length
- ll_assert(cardbyte <= 1 and bytes == 0,
- "premature end of object")
+ if interval_stop > used_length:
+ interval_stop = used_length
+ if interval_stop <= interval_start:
+ break
self.trace_and_drag_out_of_nursery_partial(
obj, interval_start, interval_stop)
#
@@ -1463,7 +1466,7 @@
# tid == -42, containing all flags), and it doesn't have the
# HAS_SHADOW flag either. We must move it out of the nursery,
# into a new nonmovable location.
- totalsize = size_gc_header + self.get_size(obj)
+ totalsize = size_gc_header + self.shrink_and_get_size(obj)
newhdr = self._malloc_out_of_nursery(totalsize)
#
elif self.is_forwarded(obj):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit