[pypy-commit] pypy stm-gc: Fix the FakeStmOperations class.
arigo
noreply at buildbot.pypy.org
Mon Apr 23 10:28:02 CEST 2012
Author: Armin Rigo <arigo at tunes.org>
Branch: stm-gc
Changeset: r54644:ac2193fe0e1c
Date: 2012-04-23 09:59 +0200
http://bitbucket.org/pypy/pypy/changeset/ac2193fe0e1c/
Log: Fix the FakeStmOperations class.
diff --git a/pypy/rlib/test/test_rstm.py b/pypy/rlib/test/test_rstm.py
--- a/pypy/rlib/test/test_rstm.py
+++ b/pypy/rlib/test/test_rstm.py
@@ -11,6 +11,12 @@
def in_transaction(self):
return self._in_transaction
+ def thread_id(self):
+ if self._in_transaction:
+ return -12345 # random number
+ else:
+ return 0
+
def _add(self, transactionptr):
r = random.random()
assert r not in self._pending # very bad luck if it is
@@ -19,16 +25,20 @@
def run_all_transactions(self, initial_transaction_ptr, num_threads=4):
self._pending = {}
self._add(initial_transaction_ptr)
- while self._pending:
- r, transactionptr = self._pending.popitem()
- transaction = self.cast_voidp_to_transaction(transactionptr)
- transaction._next_transaction = None
- nextptr = rstm._stm_run_transaction(transactionptr, 0)
- next = self.cast_voidp_to_transaction(nextptr)
- while next is not None:
- self._add(self.cast_transaction_to_voidp(next))
- next = next._next_transaction
- del self._pending
+ self._in_transaction = True
+ try:
+ while self._pending:
+ r, transactionptr = self._pending.popitem()
+ transaction = self.cast_voidp_to_transaction(transactionptr)
+ transaction._next_transaction = None
+ nextptr = rstm._stm_run_transaction(transactionptr, 0)
+ next = self.cast_voidp_to_transaction(nextptr)
+ while next is not None:
+ self._add(self.cast_transaction_to_voidp(next))
+ next = next._next_transaction
+ finally:
+ self._in_transaction = False
+ del self._pending
def cast_transaction_to_voidp(self, transaction):
if transaction is None:
@@ -53,14 +63,19 @@
def test_in_transaction():
res = rstm.in_transaction()
assert res is False
+ res = rstm.thread_id()
+ assert res == 0
def test_run_all_transactions_minimal():
seen = []
class Empty(rstm.Transaction):
def run(self):
- seen.append(42)
+ res = rstm.in_transaction()
+ seen.append(res is True)
+ res = rstm.thread_id()
+ seen.append(res != 0)
rstm.run_all_transactions(Empty())
- assert seen == [42]
+ assert seen == [True, True]
def test_run_all_transactions_recursive():
seen = []
More information about the pypy-commit
mailing list