Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r1085:a33130d9f35c Date: 2014-03-22 20:42 +0100 http://bitbucket.org/pypy/stmgc/changeset/a33130d9f35c/
Log: Fix the test (don't expect variables like 'arg' to remain sensible across a setjmp! They need to be volatile) diff --git a/c7/demo/demo_random.c b/c7/demo/demo_random.c --- a/c7/demo/demo_random.c +++ b/c7/demo/demo_random.c @@ -288,11 +288,12 @@ stm_become_inevitable("please"); pop_roots(); return NULL; - } else if (get_rand(360) == 1) { - fprintf(stdout, "GUT"); + } else if (get_rand(240) == 1) { push_roots(); stm_become_globally_unique_transaction("really"); + fprintf(stderr, "[GUT/%d]", (int)STM_SEGMENT->segment_num); pop_roots(); + return NULL; } return p; } @@ -324,8 +325,9 @@ setup_thread(); - objptr_t p = NULL; + objptr_t p; stm_jmpbuf_t here; + volatile int call_fork = (arg != NULL); STM_START_TRANSACTION(&stm_thread_local, here); assert(td.num_roots >= td.num_roots_at_transaction_start); @@ -345,7 +347,7 @@ if (p == (objptr_t)-1) { push_roots(); - if (arg == NULL) { /* common case */ + if (call_fork == 0) { /* common case */ stm_commit_transaction(); td.num_roots_at_transaction_start = td.num_roots; if (get_rand(100) < 98) { @@ -361,7 +363,7 @@ else { /* run a fork() inside the transaction */ printf("========== FORK =========\n"); - arg = NULL; + call_fork = 0; pid_t child = fork(); printf("=== in process %d thread %lx, fork() returned %d\n", (int)getpid(), (long)pthread_self(), (int)child); diff --git a/c7/stm/core.c b/c7/stm/core.c --- a/c7/stm/core.c +++ b/c7/stm/core.c @@ -191,9 +191,9 @@ STM_PSEGMENT->shadowstack_at_start_of_transaction = tl->shadowstack; STM_PSEGMENT->threadlocal_at_start_of_transaction = tl->thread_local_obj; + enter_safe_point_if_requested(); dprintf(("start_transaction\n")); - enter_safe_point_if_requested(); s_mutex_unlock(); /* Now running the SP_RUNNING start. We can set our _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit