Author: Armin Rigo <[email protected]>
Branch: rewind_setjmp
Changeset: r1280:60f41b3b754a
Date: 2014-08-09 17:26 +0200
http://bitbucket.org/pypy/stmgc/changeset/60f41b3b754a/
Log: Pass the demo2 tests
diff --git a/c7/demo/demo2.c b/c7/demo/demo2.c
--- a/c7/demo/demo2.c
+++ b/c7/demo/demo2.c
@@ -71,9 +71,8 @@
{
nodeptr_t r_n;
long prev, sum;
- stm_jmpbuf_t here;
- STM_START_TRANSACTION(&stm_thread_local, here);
+ stm_start_transaction(&stm_thread_local);
stm_read((objptr_t)global_chained_list);
r_n = global_chained_list;
@@ -101,11 +100,9 @@
nodeptr_t swap_nodes(nodeptr_t initial)
{
- stm_jmpbuf_t here;
-
assert(initial != NULL);
- STM_START_TRANSACTION(&stm_thread_local, here);
+ stm_start_transaction(&stm_thread_local);
if (stm_thread_local.longest_marker_state != 0) {
fprintf(stderr, "[%p] marker %d for %.6f seconds:\n",
@@ -202,7 +199,7 @@
stm_commit_transaction();
- stm_start_inevitable_transaction(&stm_thread_local);
+ stm_start_transaction(&stm_thread_local);
STM_POP_ROOT(stm_thread_local, global_chained_list); /* update value */
assert(global_chained_list->value == -1);
STM_PUSH_ROOT(stm_thread_local, global_chained_list); /* remains forever
in the shadow stack */
@@ -224,7 +221,9 @@
void *demo2(void *arg)
{
int status;
+ rewind_jmp_buf rjbuf;
stm_register_thread_local(&stm_thread_local);
+ stm_rewind_jmp_enterframe(&stm_thread_local, &rjbuf);
char *org = (char *)stm_thread_local.shadowstack;
STM_PUSH_ROOT(stm_thread_local, global_chained_list); /* remains forever
in the shadow stack */
@@ -244,6 +243,7 @@
STM_POP_ROOT(stm_thread_local, global_chained_list);
OPT_ASSERT(org == (char *)stm_thread_local.shadowstack);
+ stm_rewind_jmp_leaveframe(&stm_thread_local, &rjbuf);
unregister_thread_local();
status = sem_post(&done); assert(status == 0);
return NULL;
@@ -280,11 +280,13 @@
int main(void)
{
int status, i;
+ rewind_jmp_buf rjbuf;
status = sem_init(&done, 0, 0); assert(status == 0);
stm_setup();
stm_register_thread_local(&stm_thread_local);
+ stm_rewind_jmp_enterframe(&stm_thread_local, &rjbuf);
stmcb_expand_marker = expand_marker;
@@ -302,6 +304,7 @@
final_check();
+ stm_rewind_jmp_leaveframe(&stm_thread_local, &rjbuf);
unregister_thread_local();
//stm_teardown();
diff --git a/c7/stm/rewind_setjmp.c b/c7/stm/rewind_setjmp.c
--- a/c7/stm/rewind_setjmp.c
+++ b/c7/stm/rewind_setjmp.c
@@ -22,6 +22,7 @@
static void copy_stack(rewind_jmp_thread *rjthread, char *base)
{
+ assert(rjthread->head != NULL);
char *stop = rjthread->head->frame_base;
assert(stop > base);
struct _rewind_jmp_moved_s *next = (struct _rewind_jmp_moved_s *)
diff --git a/c7/stmgc.h b/c7/stmgc.h
--- a/c7/stmgc.h
+++ b/c7/stmgc.h
@@ -354,7 +354,7 @@
int stm_is_inevitable(void);
#else
static inline int stm_is_inevitable(void) {
- return !rewind_jmp_armed(STM_SEGMENT->running_thread->rjthread);
+ return !rewind_jmp_armed(&STM_SEGMENT->running_thread->rjthread);
}
#endif
static inline void stm_become_inevitable(stm_thread_local_t *tl,
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit