[pypy-commit] stmgc default: More attempt to fix demo_random2

arigo noreply at buildbot.pypy.org
Thu Aug 14 15:40:12 CEST 2014


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r1315:29376f500349
Date: 2014-08-14 15:38 +0200
http://bitbucket.org/pypy/stmgc/changeset/29376f500349/

Log:	More attempt to fix demo_random2

diff --git a/c7/stm/core.c b/c7/stm/core.c
--- a/c7/stm/core.c
+++ b/c7/stm/core.c
@@ -1000,7 +1000,8 @@
     /* we need to do this here and not directly in rewind_longjmp() because
        that is called when we already released everything (safe point)
        and a concurrent major GC could mess things up. */
-    stm_rewind_jmp_restore_shadowstack(tl);
+    if (tl->shadowstack != NULL)
+        stm_rewind_jmp_restore_shadowstack(tl);
     assert(tl->shadowstack == pseg->shadowstack_at_start_of_transaction);
 #endif
     tl->thread_local_obj = pseg->threadlocal_at_start_of_transaction;
diff --git a/c7/stm/forksupport.c b/c7/stm/forksupport.c
--- a/c7/stm/forksupport.c
+++ b/c7/stm/forksupport.c
@@ -187,9 +187,10 @@
 #ifndef NDEBUG
     pr->running_pthread = pthread_self();
 #endif
-    pr->pub.running_thread->shadowstack = (
-        pr->shadowstack_at_start_of_transaction);
     strcpy(pr->marker_self, "fork");
+    tl->shadowstack = NULL;
+    pr->shadowstack_at_start_of_transaction = NULL;
+    stm_rewind_jmp_forget(tl);
     abort_with_mutex_no_longjmp();
     s_mutex_unlock();
 }
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
@@ -195,9 +195,6 @@
 void _rewind_jmp_free_stack_slices(rewind_jmp_thread *rjthread)
 {
     /* frees all saved stack copies */
-#ifdef _STM_CORE_H_
-    assert(_seems_to_be_running_transaction());  /* see previous function */
-#endif
     struct _rewind_jmp_moved_s *p = rjthread->moved_off;
     while (p) {
         struct _rewind_jmp_moved_s *pnext = p->next;


More information about the pypy-commit mailing list