[pypy-commit] pypy stm-thread: Tweak.
arigo
noreply at buildbot.pypy.org
Fri Jun 8 21:27:18 CEST 2012
Author: Armin Rigo <arigo at tunes.org>
Branch: stm-thread
Changeset: r55530:79d99ff94bf2
Date: 2012-06-08 21:16 +0200
http://bitbucket.org/pypy/pypy/changeset/79d99ff94bf2/
Log: Tweak.
diff --git a/pypy/translator/stm/src_stm/core.c b/pypy/translator/stm/src_stm/core.c
--- a/pypy/translator/stm/src_stm/core.c
+++ b/pypy/translator/stm/src_stm/core.c
@@ -89,7 +89,8 @@
return d->active == 2;
}
-/*** run the redo log to commit a transaction, and release the locks */
+/*** run the redo log to commit a transaction, and release the locks.
+ Cannot abort any more. */
static void tx_redo(struct tx_descriptor *d, owner_version_t newver)
{
wlog_t *item;
@@ -343,7 +344,7 @@
acquireLocks(d);
}
-static void commitInevitableTransaction(struct tx_descriptor *d)
+static owner_version_t commitInevitableTransaction(struct tx_descriptor *d)
{
unsigned long ts;
_Bool ok;
@@ -356,10 +357,12 @@
set_global_timestamp(d, ts);
assert(ts == (d->start_time + 2));
- // run the redo log, and release the locks
- tx_redo(d, ts);
+ /* we still have the locks acquired, but we changed the global timestamp
+ * and we can release the mutex here. The locked orecs will be updated
+ * immediately afterwards by tx_redo(). */
+ mutex_unlock();
- mutex_unlock();
+ return ts;
}
/* lazy/lazy read instrumentation */
@@ -571,6 +574,7 @@
void stm_commit_transaction(void)
{
+ owner_version_t end_time;
struct tx_descriptor *d = thread_descriptor;
assert(d->active != 0);
@@ -597,11 +601,10 @@
if (is_inevitable(d))
{
- commitInevitableTransaction(d);
+ end_time = commitInevitableTransaction(d);
}
else
{
- owner_version_t end_time;
while (1)
{
unsigned long expected = get_global_timestamp(d);
@@ -622,10 +625,10 @@
// validate (but skip validation if nobody else committed)
if (end_time != (d->start_time + 2))
validate(d);
+ }
- // run the redo log, and release the locks
- tx_redo(d, end_time);
- }
+ // run the redo log, and release the locks
+ tx_redo(d, end_time);
// remember that this was a commit
d->num_commits++;
More information about the pypy-commit
mailing list