[pypy-commit] pypy stmgc-static-barrier: import stmgc/f614fd3a4080
arigo
noreply at buildbot.pypy.org
Thu Aug 22 22:59:30 CEST 2013
Author: Armin Rigo <arigo at tunes.org>
Branch: stmgc-static-barrier
Changeset: r66301:ba4f437bc2c2
Date: 2013-08-22 22:58 +0200
http://bitbucket.org/pypy/pypy/changeset/ba4f437bc2c2/
Log: import stmgc/f614fd3a4080
diff --git a/rpython/translator/stm/src_stm/et.c b/rpython/translator/stm/src_stm/et.c
--- a/rpython/translator/stm/src_stm/et.c
+++ b/rpython/translator/stm/src_stm/et.c
@@ -958,6 +958,7 @@
SpinLoop(SPLP_ABORT);
// jump back to the setjmp_buf (this call does not return)
d->active = 0;
+ d->atomic = 0;
stm_stop_sharedlock();
longjmp(*d->setjmp_buf, 1);
}
@@ -1362,6 +1363,7 @@
revision_t cur_time;
struct tx_descriptor *d = thread_descriptor;
assert(d->active >= 1);
+ assert(d->atomic == 0);
dprintf(("CommitTransaction(%p)\n", d));
spinlock_acquire(d->public_descriptor->collection_lock, 'C'); /*committing*/
if (d->public_descriptor->stolen_objects.size != 0)
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 @@
-c83f63e68ab7
+f614fd3a4080
diff --git a/rpython/translator/stm/src_stm/stmsync.c b/rpython/translator/stm/src_stm/stmsync.c
--- a/rpython/translator/stm/src_stm/stmsync.c
+++ b/rpython/translator/stm/src_stm/stmsync.c
@@ -136,12 +136,11 @@
jmp_buf _jmpbuf;
long volatile v_counter = 0;
gcptr *volatile v_saved_value = stm_shadowstack;
- long volatile v_atomic;
stm_push_root(arg);
stm_push_root(END_MARKER_OFF);
- if (!(v_atomic = thread_descriptor->atomic))
+ if (!thread_descriptor->atomic)
CommitTransaction();
#ifdef _GC_ON_CPYTHON
@@ -160,11 +159,9 @@
struct tx_descriptor *d = thread_descriptor;
long counter, result;
counter = v_counter;
- d->atomic = v_atomic;
stm_shadowstack = v_saved_value + 2; /*skip the two values pushed above*/
do {
- v_atomic = d->atomic;
v_counter = counter + 1;
/* If counter==0, initialize 'reads_size_limit_nonatomic' from the
configured length limit. If counter>0, we did an abort, which
@@ -186,6 +183,7 @@
/* atomic transaction: a common case is that callback() returned
even though we are atomic because we need a major GC. For
that case, release and reaquire the rw lock here. */
+ assert(d->active >= 1);
stm_possible_safe_point();
}
More information about the pypy-commit
mailing list