[pypy-commit] stmgc c8-efficient-serial-execution-master: Add some commentary to enable/disable atomic
tobweber
pypy.commits at gmail.com
Tue Jul 11 11:07:28 EDT 2017
Author: Tobias Weber <tobias_weber89 at gmx.de>
Branch: c8-efficient-serial-execution-master
Changeset: r2098:6da61052f101
Date: 2017-07-10 17:15 +0200
http://bitbucket.org/pypy/stmgc/changeset/6da61052f101/
Log: Add some commentary to enable/disable atomic
diff --git a/c8/stm/detach.c b/c8/stm/detach.c
--- a/c8/stm/detach.c
+++ b/c8/stm/detach.c
@@ -229,14 +229,18 @@
return STM_PSEGMENT->atomic_nesting_levels;
}
+// max intptr_t value is 7FFFFFFFFFFFFFFF on 64-bit => larger than 2 * huge value
#define HUGE_INTPTR_VALUE 0x3000000000000000L
void stm_enable_atomic(stm_thread_local_t *tl)
{
if (!stm_is_atomic(tl)) {
+ // do for outermost atomic block only
tl->self_or_0_if_atomic = 0;
/* increment 'nursery_mark' by HUGE_INTPTR_VALUE, so that
- stm_should_break_transaction() returns always false */
+ stm_should_break_transaction() returns always false.
+ preserves the previous nursery_mark, unless it is < 0
+ or >= huge value */
intptr_t mark = (intptr_t)STM_SEGMENT->nursery_mark;
if (mark < 0)
mark = 0;
@@ -256,6 +260,7 @@
STM_PSEGMENT->atomic_nesting_levels--;
if (STM_PSEGMENT->atomic_nesting_levels == 0) {
+ // revert changes by stm_enable_atomic only if we left the outermost atomic block
tl->self_or_0_if_atomic = (intptr_t)tl;
/* decrement 'nursery_mark' by HUGE_INTPTR_VALUE, to cancel
what was done in stm_enable_atomic() */
More information about the pypy-commit
mailing list