[pypy-commit] pypy stmgc-c7: Insert a call to stm_wait_for_current_inevitable_transaction()

arigo noreply at buildbot.pypy.org
Wed Mar 18 10:14:45 CET 2015


Author: Armin Rigo <arigo at tunes.org>
Branch: stmgc-c7
Changeset: r76451:cc6db35b39d6
Date: 2015-03-18 10:08 +0100
http://bitbucket.org/pypy/pypy/changeset/cc6db35b39d6/

Log:	Insert a call to stm_wait_for_current_inevitable_transaction()

diff --git a/rpython/translator/stm/src_stm/stmgcintf.c b/rpython/translator/stm/src_stm/stmgcintf.c
--- a/rpython/translator/stm/src_stm/stmgcintf.c
+++ b/rpython/translator/stm/src_stm/stmgcintf.c
@@ -167,7 +167,7 @@
     pypy_stm_nursery_low_fill_mark = _stm_nursery_start + limit;
 }
 
-long _pypy_stm_start_transaction(void)
+void _pypy_stm_start_transaction(void)
 {
     pypy_stm_nursery_low_fill_mark = 1;  /* will be set to a correct value below */
     long counter = stm_start_transaction(&stm_thread_local);
@@ -175,8 +175,14 @@
     _pypy_stm_initialize_nursery_low_fill_mark(counter);
 
     pypy_stm_ready_atomic = 1; /* reset after abort */
+}
 
-    return counter;
+void _pypy_stm_start_transaction_save_errno_wait_inev(void)
+{
+    int e = errno;
+    stm_wait_for_current_inevitable_transaction();
+    _pypy_stm_start_transaction();
+    errno = e;
 }
 
 void pypy_stm_transaction_break(void)
diff --git a/rpython/translator/stm/src_stm/stmgcintf.h b/rpython/translator/stm/src_stm/stmgcintf.h
--- a/rpython/translator/stm/src_stm/stmgcintf.h
+++ b/rpython/translator/stm/src_stm/stmgcintf.h
@@ -26,7 +26,8 @@
 
 void _pypy_stm_initialize_nursery_low_fill_mark(long v_counter);
 void _pypy_stm_inev_state(void);
-long _pypy_stm_start_transaction(void);
+void _pypy_stm_start_transaction(void);
+void _pypy_stm_start_transaction_save_errno_wait_inev(void);
 
 void _pypy_stm_become_inevitable(const char *);
 
@@ -57,11 +58,8 @@
     errno = e;
 }
 static inline void pypy_stm_start_if_not_atomic(void) {
-    if (pypy_stm_ready_atomic == 1) {
-        int e = errno;
-        _pypy_stm_start_transaction();
-        errno = e;
-    }
+    if (pypy_stm_ready_atomic == 1)
+        _pypy_stm_start_transaction_save_errno_wait_inev();
 }
 static inline void pypy_stm_start_inevitable_if_not_atomic(void) {
     if (pypy_stm_ready_atomic == 1) {


More information about the pypy-commit mailing list