Author: Remi Meier <[email protected]>
Branch: stmgc-c8
Changeset: r76668:61dcdb6f958a
Date: 2015-04-01 11:14 +0200
http://bitbucket.org/pypy/pypy/changeset/61dcdb6f958a/

Log:    add become_inevitable to make sure that a piece of raw memory is
        only given to one transaction at a time (JITFRAMEINFO is
        stm_dont_track_raw_access and hence may have been given to and
        modified by two transactions doing an assemble_loop)

diff --git a/rpython/jit/backend/llsupport/assembler.py 
b/rpython/jit/backend/llsupport/assembler.py
--- a/rpython/jit/backend/llsupport/assembler.py
+++ b/rpython/jit/backend/llsupport/assembler.py
@@ -71,6 +71,12 @@
         # the address of the function called by 'new'
         gc_ll_descr = self.cpu.gc_ll_descr
         gc_ll_descr.initialize()
+        if self.cpu.gc_ll_descr.stm:
+            from rpython.rlib import rstm
+            # become inevitable so that the raw-memory used later
+            # will only be modified by one thread at a time
+            rstm.become_inevitable()
+
         if hasattr(gc_ll_descr, 'minimal_size_in_nursery'):
             self.gc_minimal_size_in_nursery = 
gc_ll_descr.minimal_size_in_nursery
         else:
diff --git a/rpython/jit/backend/x86/assembler.py 
b/rpython/jit/backend/x86/assembler.py
--- a/rpython/jit/backend/x86/assembler.py
+++ b/rpython/jit/backend/x86/assembler.py
@@ -86,6 +86,12 @@
         if WORD == 8:
             self.pending_memoryerror_trampoline_from = []
             self.error_trampoline_64 = 0
+
+        if self.cpu.gc_ll_descr.stm:
+            # become inevitable so that the raw-memory used later
+            # will only be modified by one thread at a time
+            rstm.become_inevitable()
+
         self.mc = codebuf.MachineCodeBlockWrapper()
         #assert self.datablockwrapper is None --- but obscure case
         # possible, e.g. getting MemoryError and continuing
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to