[pypy-commit] stmgc c7: WIP: implement run-transactions in duhton

Remi Meier noreply at buildbot.pypy.org
Tue Jan 28 16:30:53 CET 2014


Author: Remi Meier
Branch: c7
Changeset: r686:257f822e0770
Date: 2014-01-28 16:31 +0100
http://bitbucket.org/pypy/stmgc/changeset/257f822e0770/

Log:	WIP: implement run-transactions in duhton

diff --git a/c7/core.h b/c7/core.h
--- a/c7/core.h
+++ b/c7/core.h
@@ -227,6 +227,7 @@
 
 void _stm_minor_collect();
 #define stm_become_inevitable(msg)   /* XXX implement me! */
+#define stm_start_inevitable_transaction() stm_start_transaction(NULL)   /* XXX implement me! */
 
 struct _thread_local1_s* _stm_dbg_get_tl(int thread); /* -1 is current thread */
 
diff --git a/duhton/demo/sort.duh b/duhton/demo/sort.duh
--- a/duhton/demo/sort.duh
+++ b/duhton/demo/sort.duh
@@ -136,7 +136,7 @@
 (print bs)
 (print (split_list as))
 
-(setq cs (random_list 1000))
+(setq cs (random_list 10000))
 (print_list cs)
 (print_list (merge_sort (copy_list cs)))
 
diff --git a/duhton/glob.c b/duhton/glob.c
--- a/duhton/glob.c
+++ b/duhton/glob.c
@@ -679,6 +679,21 @@
     return Du_None;
 }
 
+DuObject *du_run_transactions(DuObject *cons, DuObject *locals)
+{
+    if (cons != Du_None)
+        Du_FatalError("run-transactions: expected no argument");
+
+    _du_save1(stm_thread_local_obj);
+    stm_stop_transaction();
+    _du_restore1(stm_thread_local_obj);
+    
+    Du_TransactionRun();
+    
+    stm_start_inevitable_transaction();
+    return Du_None;
+}
+
 DuObject *du_sleepms(DuObject *cons, DuObject *locals)
 {
     DuObject *obj;
@@ -793,6 +808,7 @@
     DuFrame_SetBuiltinMacro(Du_Globals, "cons", du_cons);
     DuFrame_SetBuiltinMacro(Du_Globals, "not", du_not);
     DuFrame_SetBuiltinMacro(Du_Globals, "transaction", du_transaction);
+    DuFrame_SetBuiltinMacro(Du_Globals, "run-transactions", du_run_transactions);
     DuFrame_SetBuiltinMacro(Du_Globals, "sleepms", du_sleepms);
     DuFrame_SetBuiltinMacro(Du_Globals, "defined?", du_defined);
     DuFrame_SetBuiltinMacro(Du_Globals, "pair?", du_pair);
diff --git a/duhton/transaction.c b/duhton/transaction.c
--- a/duhton/transaction.c
+++ b/duhton/transaction.c
@@ -23,6 +23,7 @@
 
 static void run_all_threads(void)
 {
+    thread_sleeping = 0;
     int i;
     for (i = 0; i < all_threads_count; i++) {
         int status = pthread_create(&all_threads[i], NULL, run_thread,
@@ -34,6 +35,7 @@
     }
     for (i = 0; i < all_threads_count; i++) {
         pthread_join(all_threads[i], NULL);
+        all_threads[i] = (pthread_t)NULL;
     }
 }
 


More information about the pypy-commit mailing list