Author: Armin Rigo <ar...@tunes.org>
Branch: 
Changeset: r897:40ba082e00e8
Date: 2014-02-27 18:36 +0100
http://bitbucket.org/pypy/stmgc/changeset/40ba082e00e8/

Log:    become_inevitable(): was missing resetting jmpbuf_ptr to NULL

diff --git a/c7/stm/core.c b/c7/stm/core.c
--- a/c7/stm/core.c
+++ b/c7/stm/core.c
@@ -505,7 +505,7 @@
     __builtin_longjmp(*jmpbuf_ptr, 1);
 }
 
-void _stm_become_inevitable(char *msg)
+void _stm_become_inevitable(const char *msg)
 {
     mutex_lock();
     switch (STM_PSEGMENT->transaction_state) {
@@ -517,6 +517,7 @@
         /* become inevitable */
         wait_for_end_of_inevitable_transaction(true);
         STM_PSEGMENT->transaction_state = TS_INEVITABLE;
+        STM_SEGMENT->jmpbuf_ptr = NULL;
         break;
 
     case TS_MUST_ABORT:
@@ -525,5 +526,6 @@
     default:
         assert(!"invalid transaction_state in become_inevitable");
     }
+    dprintf(("become_inevitable: %s\n", msg));
     mutex_unlock();
 }
diff --git a/c7/stmgc.h b/c7/stmgc.h
--- a/c7/stmgc.h
+++ b/c7/stmgc.h
@@ -64,7 +64,7 @@
 void _stm_write_slowpath(object_t *);
 object_t *_stm_allocate_slowpath(ssize_t);
 object_t *_stm_allocate_external(ssize_t);
-void _stm_become_inevitable(char*);
+void _stm_become_inevitable(const char*);
 void _stm_start_transaction(stm_thread_local_t *, stm_jmpbuf_t *);
 void _stm_collectable_safe_point(void);
 
@@ -236,7 +236,7 @@
 /* Turn the current transaction inevitable.  The 'jmpbuf' passed to
    STM_START_TRANSACTION() is not going to be used any more after
    this call (but the stm_become_inevitable() itself may still abort). */
-static inline void stm_become_inevitable(char* msg) {
+static inline void stm_become_inevitable(const char* msg) {
     if (STM_SEGMENT->jmpbuf_ptr != NULL)
         _stm_become_inevitable(msg);
 }
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to