Author: Armin Rigo <ar...@tunes.org>
Branch: 
Changeset: r239:fe90ba781e8a
Date: 2013-06-22 18:30 +0200
http://bitbucket.org/pypy/stmgc/changeset/fe90ba781e8a/

Log:    demo_random shows another livelock with this spinloop. Added it to
        the comment, revert again to always abort.

diff --git a/c4/et.c b/c4/et.c
--- a/c4/et.c
+++ b/c4/et.c
@@ -675,23 +675,23 @@
             {
               if (v != d->my_lock)         // not locked by me: conflict
                 {
-                  /* A case that can occur: two threads A and B are both
+                  /* It's delicate here to do a spinloop rather than
+                     just aborting.
+
+                     A case that can occur: two threads A and B are both
                      committing, thread A locked object a, thread B
                      locked object b, and then thread A tries to
                      validate the reads it did on object b and
                      vice-versa.  In this case both threads cannot
                      commit, but if they both enter the SpinLoop()
-                     above, then they will livelock.
+                     here, then they will livelock.
 
-                     But this might lead both threads to cancel by
-                     reaching this point.  For now we attempt to be
-                     more clever and let one of the threads commit
-                     anyway (the choice of which one looks random).
+                     Another case: thread A might be blocked in this
+                     spinloop, while thread B is blocked in the
+                     SpinLoop(SPLP_LOCKED_COMMIT) below.
+
+                     For now we always abort.
                   */
-                  if (d->my_lock < v) {
-                      SpinLoop(SPLP_LOCKED_VALIDATE);
-                      goto retry;
-                  }
                   fprintf(stderr, "validation failed: "
                           "%p is locked by another thread\n", R);
                   return 0;
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to