Author: Armin Rigo <ar...@tunes.org>
Branch: marker
Changeset: r1190:3e7dc1e81647
Date: 2014-04-28 18:08 +0200
http://bitbucket.org/pypy/stmgc/changeset/3e7dc1e81647/

Log:    A passing test

diff --git a/c7/test/test_marker.py b/c7/test/test_marker.py
--- a/c7/test/test_marker.py
+++ b/c7/test/test_marker.py
@@ -299,3 +299,36 @@
         assert tl.longest_marker_state == lib.STM_TIME_RUN_ABORTED_WRITE_WRITE
         assert ffi.string(tl.longest_marker_self) == '19'
         assert ffi.string(tl.longest_marker_other) == '21'
+
+    def test_double_remote_markers_cb_write_read(self):
+        @ffi.callback("void(char *, uintptr_t, object_t *, char *, size_t)")
+        def expand_marker(base, number, ptr, outbuf, outbufsize):
+            s = '%d\x00' % (number,)
+            assert len(s) <= outbufsize
+            outbuf[0:len(s)] = s
+        lib.stmcb_expand_marker = expand_marker
+        p = stm_allocate_old(16)
+        #
+        self.start_transaction()
+        assert stm_get_char(p) == '\x00'    # read
+        tl0 = self.get_stm_thread_local()
+        #
+        self.switch(1)
+        self.start_transaction()
+        self.become_inevitable()
+        self.push_root(ffi.cast("object_t *", 21))
+        self.push_root(ffi.cast("object_t *", ffi.NULL))
+        stm_set_char(p, 'B')                # write, will abort #0
+        self.pop_root()
+        self.pop_root()
+        self.push_root(ffi.cast("object_t *", 23))
+        self.push_root(ffi.cast("object_t *", ffi.NULL))
+        self.commit_transaction()
+        #
+        py.test.raises(Conflict, self.switch, 0)
+        #
+        tl = self.get_stm_thread_local()
+        assert tl is tl0
+        assert tl.longest_marker_state == lib.STM_TIME_RUN_ABORTED_WRITE_READ
+        assert ffi.string(tl.longest_marker_self)=='<read at unknown location>'
+        assert ffi.string(tl.longest_marker_other) == '21'
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to