[pypy-commit] pypy gc-del-2: Fixes
arigo
noreply at buildbot.pypy.org
Tue Sep 10 22:34:16 CEST 2013
Author: Armin Rigo <arigo at tunes.org>
Branch: gc-del-2
Changeset: r66894:aa0885f380b5
Date: 2013-09-10 22:16 +0200
http://bitbucket.org/pypy/pypy/changeset/aa0885f380b5/
Log: Fixes
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
@@ -682,8 +682,8 @@
def external_malloc(self, typeid, length):
- """Allocate a large object using raw_malloc(),
- possibly as an object with card marking enabled,
+ """Allocate a young, large object using raw_malloc(), possibly
+ as an object with card marking enabled, if large enough and
if it has gc pointers in its var-sized part. 'length' should be
specified as 0 if the object is not varsized. The returned
object is fully initialized and zero-filled."""
@@ -738,12 +738,11 @@
extra_words = self.card_marking_words_for_length(length)
cardheadersize = WORD * extra_words
extra_flags = GCFLAG_HAS_CARDS | GCFLAG_TRACK_YOUNG_PTRS
- # if 'can_make_young', then we also immediately set
+ # We also immediately set
# GCFLAG_CARDS_SET, but without adding the object to
# 'old_objects_with_cards_set'. In this way it should
# never be added to that list as long as it is young.
- if can_make_young:
- extra_flags |= GCFLAG_CARDS_SET
+ extra_flags |= GCFLAG_CARDS_SET
#
# Detect very rare cases of overflows
if raw_malloc_usage(totalsize) > (sys.maxint - (WORD-1)
@@ -776,16 +775,12 @@
llarena.arena_reserve(result, totalsize)
#
# Record the newly allocated object and its full malloced size.
- # The object is young or old depending on the argument.
+ # The new object is always young.
self.rawmalloced_total_size += r_uint(allocsize)
- if can_make_young:
- if not self.young_objects_not_in_nursery:
- self.young_objects_not_in_nursery = self.AddressDict()
- self.young_objects_not_in_nursery.add(result + size_gc_header)
- extra_flags |= GCFLAG_YOUNG_RAW_MALLOCED
- else:
- self.old_rawmalloced_objects.append(result + size_gc_header)
- extra_flags |= GCFLAG_TRACK_YOUNG_PTRS
+ if not self.young_objects_not_in_nursery:
+ self.young_objects_not_in_nursery = self.AddressDict()
+ self.young_objects_not_in_nursery.add(result + size_gc_header)
+ extra_flags |= GCFLAG_YOUNG_RAW_MALLOCED
#
# Common code to fill the header and length of the object.
self.init_gc_object(result, typeid, extra_flags)
More information about the pypy-commit
mailing list