Author: Remi Meier
Branch: 
Changeset: r1109:ef9851277c7c
Date: 2014-03-27 17:54 +0100
http://bitbucket.org/pypy/stmgc/changeset/ef9851277c7c/

Log:    wah, some more obvious fixes

diff --git a/htm-c7/stmgc.c b/htm-c7/stmgc.c
--- a/htm-c7/stmgc.c
+++ b/htm-c7/stmgc.c
@@ -4,8 +4,9 @@
 #include "htm.h"
 
 pthread_mutex_t _stm_gil = PTHREAD_MUTEX_INITIALIZER;
-stm_thread_local_t *_stm_tloc;
-struct stm_segment_info_s _stm_segment;
+__thread stm_thread_local_t *_stm_tloc;
+//struct stm_segment_info_s _stm_segment;
+__thread struct stm_segment_info_s* _stm_segment;
 
 #define TRANSIENT_RETRY_MAX 5
 #define GIL_RETRY_MAX 5
@@ -273,6 +274,7 @@
 void stm_register_thread_local(stm_thread_local_t *tl) {
     objects_pointing_to_nursery = list_create();
     young_weakrefs = list_create();
+    _stm_segment = malloc(sizeof(struct stm_segment_info_s));
 
     tl->thread_local_obj = NULL;
     tl->shadowstack_base = (object_t **)malloc(768*1024);
@@ -290,6 +292,7 @@
 
     list_free(objects_pointing_to_nursery);
     list_free(young_weakrefs);
+    free(_stm_segment);
 }
 
 
@@ -323,9 +326,9 @@
 #define NB_NURSERY_PAGES    1024          // 4MB
 #define NURSERY_SIZE        (NB_NURSERY_PAGES * 4096UL)
 
-char *_stm_nursery_base    = NULL;
-char *_stm_nursery_current = NULL;
-char *_stm_nursery_end     = NULL;
+__thread char *_stm_nursery_base    = NULL;
+__thread char *_stm_nursery_current = NULL;
+__thread char *_stm_nursery_end     = NULL;
 #define _stm_nursery_start ((uintptr_t)_stm_nursery_base)
 
 static bool _is_in_nursery(object_t *obj)
@@ -427,7 +430,7 @@
 static void throw_away_nursery(void)
 {
     if (_stm_nursery_base == NULL) {
-        _stm_nursery_base = malloc(NURSERY_SIZE);
+        _stm_nursery_base = tl_malloc(NURSERY_SIZE);
         assert(_stm_nursery_base);
         _stm_nursery_end = _stm_nursery_base + NURSERY_SIZE;
         _stm_nursery_current = _stm_nursery_base;
@@ -435,6 +438,7 @@
 
     memset(_stm_nursery_base, 0, _stm_nursery_current-_stm_nursery_base);
     _stm_nursery_current = _stm_nursery_base;
+    STM_SEGMENT->nursery_current = _stm_nursery_current;
 }
 
 #define WEAKREF_PTR(wr, sz)  ((object_t * TLPREFIX *)(((char *)(wr)) + (sz) - 
sizeof(void*)))
@@ -503,6 +507,7 @@
     char *end = p + size_rounded_up;
     assert(end <= _stm_nursery_end);
     _stm_nursery_current = end;
+    STM_SEGMENT->nursery_current = end;
     return (object_t *)p;
 }
 
diff --git a/htm-c7/stmgc.h b/htm-c7/stmgc.h
--- a/htm-c7/stmgc.h
+++ b/htm-c7/stmgc.h
@@ -36,16 +36,17 @@
     size_t mem_bytes_to_clear_on_abort;  /* compat only -- always NULL */
 }  stm_thread_local_t;
 
-extern stm_thread_local_t *_stm_tloc;
-extern char *_stm_nursery_current, *_stm_nursery_end;
+extern __thread stm_thread_local_t *_stm_tloc;
+extern __thread char *_stm_nursery_current, *_stm_nursery_end;
 
 
 struct stm_segment_info_s {
     stm_jmpbuf_t *jmpbuf_ptr;  /* compat only -- always NULL */
-    char *nursery_current;     /* compat only -- always NULL */
+    char *nursery_current;     /* updated... */
 };
-extern struct stm_segment_info_s _stm_segment;
-#define STM_SEGMENT (&_stm_segment)
+//extern struct stm_segment_info_s _stm_segment;
+extern __thread struct stm_segment_info_s *_stm_segment;
+#define STM_SEGMENT (_stm_segment)
 
 #ifdef NDEBUG
 #define OPT_ASSERT(cond) do { if (!(cond)) __builtin_unreachable(); } while (0)
@@ -75,6 +76,7 @@
     char *p = _stm_nursery_current;
     char *end = p + size_rounded_up;
     _stm_nursery_current = end;
+    STM_SEGMENT->nursery_current = end;
     if (UNLIKELY(end > _stm_nursery_end))
         return _stm_allocate_slowpath(size_rounded_up);
 
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to