[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