[pypy-commit] stmgc finalizer-queues: add finalizers to test_random

Raemi pypy.commits at gmail.com
Thu Nov 24 05:00:26 EST 2016


Author: Remi Meier <remi.meier at gmail.com>
Branch: finalizer-queues
Changeset: r2002:dbfc15bd706f
Date: 2016-11-17 13:34 +0100
http://bitbucket.org/pypy/stmgc/changeset/dbfc15bd706f/

Log:	add finalizers to test_random

diff --git a/c8/test/test_zrandom.py b/c8/test/test_zrandom.py
--- a/c8/test/test_zrandom.py
+++ b/c8/test/test_zrandom.py
@@ -411,13 +411,20 @@
     global_state.add_noconfl_obj(r)
 
 def op_allocate_ref(ex, global_state, thread_state):
-    num = str(global_state.rnd.randrange(1, 1000))
+    g_rnd = global_state.rnd
+    num = str(g_rnd.randrange(1, 1000))
     r = global_state.get_new_root_name(True, num)
     thread_state.push_roots(ex)
     ex.do('%s = stm_allocate_refs(%s)' % (r, num))
     ex.do('# 0x%x' % (int(ffi.cast("uintptr_t", ex.content[r]))))
     thread_state.transaction_state.add_root(r, "ffi.NULL", True)
 
+    if g_rnd.randrange(10) == 0:
+        # XXX: should empty the queues sometimes! but calling next_to_finalize
+        # *may* turn inevitable (but only if there is something in the queue).
+        # so that's a bit involved...
+        ex.do('lib.stm_enable_finalizer(%s, %s)' % (g_rnd.randrange(2), r))
+
     thread_state.pop_roots(ex)
     thread_state.reload_roots(ex)
     thread_state.register_root(r)
@@ -585,6 +592,25 @@
         N_THREADS = self.NB_THREADS
         ex = Exec(self)
         ex.do("################################################################\n"*10)
+        ex.do("""
+
+ at ffi.callback("stm_finalizer_trigger_fn")
+def trigger0():
+    pass
+ at ffi.callback("stm_finalizer_trigger_fn")
+def trigger1():
+    pass
+self._trigger_keepalive = [trigger0, trigger1]
+triggers = ffi.new("stm_finalizer_trigger_fn[]", self._trigger_keepalive)
+lib.stm_setup_finalizer_queues(2, triggers)
+#
+ at ffi.callback("void(object_t *)")
+def finalizer(obj):
+    pass
+lib.stmcb_finalizer = finalizer
+self._finalizer_keepalive = finalizer
+        """)
+
         ex.do('# initialization')
 
         global_state = GlobalState(ex, rnd)
@@ -624,7 +650,7 @@
         ]
         possible_actions = [item for sublist in possible_actions for item in sublist]
         print possible_actions
-        for _ in range(2000):
+        for _ in range(3000):
             # make sure we are in a transaction:
             curr_thread = op_switch_thread(ex, global_state, curr_thread)
 


More information about the pypy-commit mailing list