Author: Armin Rigo <ar...@tunes.org> Branch: stm-gc Changeset: r54459:12759f6412ee Date: 2012-04-17 13:02 +0200 http://bitbucket.org/pypy/pypy/changeset/12759f6412ee/
Log: Backed out changeset 93da8b4ece49 diff --git a/pypy/rlib/rstm.py b/pypy/rlib/rstm.py --- a/pypy/rlib/rstm.py +++ b/pypy/rlib/rstm.py @@ -14,7 +14,7 @@ @specialize.memo() def _get_stm_callback(func, argcls): def _stm_callback(llarg, retry_counter): - llop.stm_start_transaction(lltype.Void, retry_counter) + llop.stm_start_transaction(lltype.Void) if we_are_translated(): llarg = rffi.cast(rclass.OBJECTPTR, llarg) arg = cast_base_ptr_to_instance(argcls, llarg) diff --git a/pypy/rpython/lltypesystem/opimpl.py b/pypy/rpython/lltypesystem/opimpl.py --- a/pypy/rpython/lltypesystem/opimpl.py +++ b/pypy/rpython/lltypesystem/opimpl.py @@ -632,7 +632,7 @@ from pypy.translator.stm import stmgcintf stmgcintf.StmOperations.del_tls() -def op_stm_start_transaction(retry_counter): +def op_stm_start_transaction(): pass def op_stm_commit_transaction(): diff --git a/pypy/rpython/memory/gc/stmgc.py b/pypy/rpython/memory/gc/stmgc.py --- a/pypy/rpython/memory/gc/stmgc.py +++ b/pypy/rpython/memory/gc/stmgc.py @@ -121,7 +121,7 @@ # from pypy.rpython.memory.gc.stmtls import StmGCTLS self.main_thread_tls = StmGCTLS(self, in_main_thread=True) - self.main_thread_tls.start_transaction(-1) + self.main_thread_tls.start_transaction() def setup_thread(self): from pypy.rpython.memory.gc.stmtls import StmGCTLS @@ -195,8 +195,8 @@ if gen > 0: debug_print("XXX not doing a global collect()") - def start_transaction(self, retry_counter): - self.get_tls().start_transaction(retry_counter) + def start_transaction(self): + self.get_tls().start_transaction() def commit_transaction(self): self.get_tls().stop_transaction() 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 @@ -117,24 +117,19 @@ if value is not self: del StmGCTLS.nontranslated_dict[key] self.stm_operations.leave_transactional_mode() - self.start_transaction(-1) + self.start_transaction() - def start_transaction(self, retry_counter): + def start_transaction(self): """Start a transaction: performs any pending cleanups, and set up a fresh state for allocating. Called at the start of each transaction, and at the start of the main thread.""" # Note that the calls to enter() and # end_of_transaction_collection() are not balanced: if a - # transaction is aborted, the latter might never be called - # and we get back to here with retry_counter > 0. + # transaction is aborted, the latter might never be called. # Be ready here to clean up any state. self._cleanup_state() - rw = self.gc.root_walker - if retry_counter > 0: - rw.set_current_stack_roots_limit(self.stack_root_limit) - else: - self.stack_root_limit = rw.get_current_stack_roots_limit() - # + if self is not self.gc.main_thread_tls: + self.gc.root_walker.clear_current_stack_roots() if self.nursery_free: clear_size = self.nursery_free - self.nursery_start else: diff --git a/pypy/rpython/memory/gc/test/test_stmgc.py b/pypy/rpython/memory/gc/test/test_stmgc.py --- a/pypy/rpython/memory/gc/test/test_stmgc.py +++ b/pypy/rpython/memory/gc/test/test_stmgc.py @@ -135,8 +135,8 @@ class FakeRootWalker: def walk_current_stack_roots(self, *args): pass # no stack roots in this test file - def get_current_stack_roots_limit(self): - return "some limit" + def clear_current_stack_roots(self): + pass class StmGCTests: @@ -189,7 +189,7 @@ self.gc.stm_operations.threadnum = threadnum if threadnum not in self.gc.stm_operations._tls_dict: self.gc.setup_thread() - self.gc.start_transaction(0) + self.gc.start_transaction() def gcsize(self, S): return (llmemory.raw_malloc_usage(llmemory.sizeof(self.gc.HDR)) + llmemory.raw_malloc_usage(llmemory.sizeof(S))) 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 @@ -38,8 +38,6 @@ P = lltype.typeOf(self.current_stack[i]) self.current_stack[i] = llmemory.cast_adr_to_ptr(roots[i], P) lltype.free(roots, flavor='raw') - def get_current_stack_roots_limit(self): - return "some limit" class FakeGC: from pypy.rpython.memory.support import AddressDict, null_address_dict @@ -85,7 +83,7 @@ self.gctls_main = StmGCTLS(self.gc, in_main_thread=True) self.gctls_thrd = StmGCTLS(self.gc, in_main_thread=False) self.gc.main_thread_tls = self.gctls_main - self.gctls_main.start_transaction(-1) + self.gctls_main.start_transaction() self.gc.root_walker.current_stack = self.current_stack def stack_add(self, p): diff --git a/pypy/rpython/memory/gctransform/stmframework.py b/pypy/rpython/memory/gctransform/stmframework.py --- a/pypy/rpython/memory/gctransform/stmframework.py +++ b/pypy/rpython/memory/gctransform/stmframework.py @@ -42,7 +42,7 @@ [s_gc], annmodel.s_None) self.stm_start_ptr = getfn( self.gcdata.gc.start_transaction.im_func, - [s_gc, annmodel.SomeInteger()], annmodel.s_None) + [s_gc], annmodel.s_None) self.stm_commit_ptr = getfn( self.gcdata.gc.commit_transaction.im_func, [s_gc], annmodel.s_None) @@ -84,9 +84,7 @@ hop.genop('cast_adr_to_ptr', [v_globaladr], resultvar=op.result) def gct_stm_start_transaction(self, hop): - v_int = hop.spaceop.args[0] - hop.genop("direct_call", [self.stm_start_ptr, - self.c_const_gc, v_int]) + hop.genop("direct_call", [self.stm_start_ptr, self.c_const_gc]) def gct_stm_commit_transaction(self, hop): hop.genop("direct_call", [self.stm_commit_ptr, self.c_const_gc]) @@ -172,10 +170,8 @@ stackgcdata.root_stack_base, stackgcdata.root_stack_top) - def get_current_stack_roots_limit(self): - return self.stackgcdata.root_stack_top - - def set_current_stack_roots_limit(self, limit): + def clear_current_stack_roots(self): """Used when we start a transaction: there might be garbage left behind by the previous aborted transaction.""" - self.stackgcdata.root_stack_top = limit + stackgcdata = self.stackgcdata + stackgcdata.root_stack_top = stackgcdata.root_stack_base _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit