Author: Armin Rigo <[email protected]>
Branch: stm-thread-2
Changeset: r61408:bdf4b499e39b
Date: 2013-02-18 14:10 +0100
http://bitbucket.org/pypy/pypy/changeset/bdf4b499e39b/
Log: Flush the ThreadLocalReferences whenever we are collecting.
diff --git a/rpython/rlib/rstm.py b/rpython/rlib/rstm.py
--- a/rpython/rlib/rstm.py
+++ b/rpython/rlib/rstm.py
@@ -143,6 +143,7 @@
@staticmethod
def flush_all_in_this_thread():
if we_are_translated():
+ # NB. this line is repeated in stmtls.py
llop.stm_threadlocalref_flush(lltype.Void)
else:
for tlref in ThreadLocalReference._ALL.keys():
diff --git a/rpython/rtyper/memory/gc/stmtls.py
b/rpython/rtyper/memory/gc/stmtls.py
--- a/rpython/rtyper/memory/gc/stmtls.py
+++ b/rpython/rtyper/memory/gc/stmtls.py
@@ -179,6 +179,10 @@
#
debug_start("gc-local")
#
+ # First clear all thread-local caches, because they might
+ # contain pointers to objects that are about to move.
+ llop.stm_threadlocalref_flush(lltype.Void)
+ #
if end_of_transaction:
self.detect_flag_combination = GCFLAG_LOCAL_COPY | GCFLAG_VISITED
else:
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit