Author: Remi Meier <[email protected]>
Branch: stmgc-c8
Changeset: r83554:b19666f40456
Date: 2016-04-06 15:21 +0300
http://bitbucket.org/pypy/pypy/changeset/b19666f40456/
Log: import stmgc
diff --git a/rpython/translator/stm/src_stm/revision
b/rpython/translator/stm/src_stm/revision
--- a/rpython/translator/stm/src_stm/revision
+++ b/rpython/translator/stm/src_stm/revision
@@ -1,1 +1,1 @@
-b7f8a106095f
+ff3079618aaf
diff --git a/rpython/translator/stm/src_stm/stm/core.c
b/rpython/translator/stm/src_stm/stm/core.c
--- a/rpython/translator/stm/src_stm/stm/core.c
+++ b/rpython/translator/stm/src_stm/stm/core.c
@@ -1033,6 +1033,13 @@
check_nursery_at_transaction_start();
+ if (tl->mem_reset_on_abort) {
+ assert(!!tl->mem_stored_for_reset_on_abort);
+ memcpy(tl->mem_stored_for_reset_on_abort, tl->mem_reset_on_abort,
+ tl->mem_bytes_to_reset_on_abort);
+ }
+
+
/* Change read-version here, because if we do stm_validate in the
safe-point below, we should not see our old reads from the last
transaction. */
@@ -1432,6 +1439,9 @@
if (tl->mem_clear_on_abort)
memset(tl->mem_clear_on_abort, 0, tl->mem_bytes_to_clear_on_abort);
+ if (tl->mem_reset_on_abort)
+ memcpy(tl->mem_reset_on_abort, tl->mem_stored_for_reset_on_abort,
+ tl->mem_bytes_to_reset_on_abort);
invoke_and_clear_user_callbacks(1); /* for abort */
diff --git a/rpython/translator/stm/src_stm/stmgc.h
b/rpython/translator/stm/src_stm/stmgc.h
--- a/rpython/translator/stm/src_stm/stmgc.h
+++ b/rpython/translator/stm/src_stm/stmgc.h
@@ -76,6 +76,11 @@
the following raw region of memory is cleared. */
char *mem_clear_on_abort;
size_t mem_bytes_to_clear_on_abort;
+ /* mechanism to reset a memory location to the value it had at the start
+ of the transaction in case of an abort */
+ char *mem_reset_on_abort; /* addr */
+ size_t mem_bytes_to_reset_on_abort; /* how many bytes */
+ char *mem_stored_for_reset_on_abort; /* content at tx start */
/* the next fields are handled internally by the library */
int last_associated_segment_num; /* always a valid seg num */
int thread_local_counter;
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit