Author: Armin Rigo <ar...@tunes.org> Branch: stm-gc Changeset: r54417:e55dfbece637 Date: 2012-04-15 17:00 +0200 http://bitbucket.org/pypy/pypy/changeset/e55dfbece637/
Log: Fixes. diff --git a/pypy/rpython/memory/gc/stmshared.py b/pypy/rpython/memory/gc/stmshared.py --- a/pypy/rpython/memory/gc/stmshared.py +++ b/pypy/rpython/memory/gc/stmshared.py @@ -46,7 +46,7 @@ def free_object(self, adr2): adr1 = adr2 - self.gc.gcheaderbuilder.size_gc_header - llarena.arena_free(adr1) + llarena.arena_free(llarena.getfakearenaaddress(adr1)) def replace_special_stack(self, new_special_stack): self.special_stack.delete() diff --git a/pypy/rpython/memory/gc/stmtls.py b/pypy/rpython/memory/gc/stmtls.py --- a/pypy/rpython/memory/gc/stmtls.py +++ b/pypy/rpython/memory/gc/stmtls.py @@ -307,6 +307,10 @@ newobj - size_gc_header, totalsize) # + # Register the object here, not before the memcopy() that would + # overwrite its 'version' field + self._register_newly_malloced_obj(newobj) + # # Set the YOUNG copy's GCFLAG_VISITED and set its version to # point to the OLD copy. hdr.tid |= GCFLAG_VISITED @@ -322,9 +326,10 @@ self.pending.append(newobj) def _malloc_out_of_nursery(self, totalsize): - obj = self.sharedarea_tls.malloc_object(totalsize) + return self.sharedarea_tls.malloc_object(totalsize) + + def _register_newly_malloced_obj(self, obj): self.sharedarea_tls.add_regular(obj) - return obj def collect_roots_from_tldict(self): pass # XXX @@ -335,6 +340,7 @@ while self.pending.non_empty(): obj = self.pending.pop() self.gc.trace(obj, self._trace_drag_out, None) + self.pending.delete() def mass_free_old_local(self, previous_sharedarea_tls): obj = previous_sharedarea_tls.chained_list @@ -344,6 +350,7 @@ next = hdr.version if hdr.tid & GCFLAG_VISITED: # survives: relink in the new sharedarea_tls + hdr.tid -= GCFLAG_VISITED self.sharedarea_tls.add_regular(obj) else: # dies diff --git a/pypy/rpython/memory/gc/test/test_stmtls.py b/pypy/rpython/memory/gc/test/test_stmtls.py --- a/pypy/rpython/memory/gc/test/test_stmtls.py +++ b/pypy/rpython/memory/gc/test/test_stmtls.py @@ -152,7 +152,8 @@ srlist = self.stack_pop() sr1.sr2 = srlist srlist = sr1 - for i in range(100)[::-1]: - assert srlist - srlist = srlist.sr2 - assert not srlist + # + for j in range(i, -1, -1): + assert sr1 + sr1 = sr1.sr2 + assert not sr1 _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit