Author: Remi Meier <remi.me...@inf.ethz.ch> Branch: stmgc-c8 Changeset: r76768:9789a066a768 Date: 2015-04-09 17:11 +0200 http://bitbucket.org/pypy/pypy/changeset/9789a066a768/
Log: import stmgc-c8 e55658d12179 diff --git a/rpython/translator/stm/src_stm/revision b/rpython/translator/stm/src_stm/revision --- a/rpython/translator/stm/src_stm/revision +++ b/rpython/translator/stm/src_stm/revision @@ -1,1 +1,1 @@ -1062987da64f +e55658d12179 diff --git a/rpython/translator/stm/src_stm/stm/gcpage.c b/rpython/translator/stm/src_stm/stm/gcpage.c --- a/rpython/translator/stm/src_stm/stm/gcpage.c +++ b/rpython/translator/stm/src_stm/stm/gcpage.c @@ -106,6 +106,9 @@ object_t *_stm_allocate_old(ssize_t size_rounded_up) { /* only for tests xxx but stm_setup_prebuilt() uses this now too */ + if (size_rounded_up <= GC_LAST_SMALL_SIZE) + return _stm_allocate_old_small(size_rounded_up); + stm_char *p = allocate_outside_nursery_large(size_rounded_up); object_t *o = (object_t *)p; diff --git a/rpython/translator/stm/src_stm/stm/hashtable.c b/rpython/translator/stm/src_stm/stm/hashtable.c --- a/rpython/translator/stm/src_stm/stm/hashtable.c +++ b/rpython/translator/stm/src_stm/stm/hashtable.c @@ -109,6 +109,8 @@ { /* can only be safely called during major GC, when all other threads are suspended */ + assert(_has_mutex()); + long i; for (i = 1; i < NB_SEGMENTS; i++) { if (get_priv_segment(i)->transaction_state == TS_NONE) @@ -174,6 +176,7 @@ if (entry == NULL) continue; if (segment_base != NULL) { + /* -> compaction during major GC */ if (((struct stm_hashtable_entry_s *) REAL_ADDRESS(segment_base, entry))->object == NULL && !_stm_was_read_by_anybody((object_t *)entry)) { @@ -283,6 +286,9 @@ /* we can only enter here once! If we allocate stuff, we may run the GC, and so 'hashtableobj' might move afterwards. */ if (_is_in_nursery(hashtableobj)) { + /* this also means that the hashtable is from this + transaction and not visible to other segments yet, so + the new entry can be nursery-allocated. */ entry = (stm_hashtable_entry_t *) stm_allocate(sizeof(stm_hashtable_entry_t)); entry->userdata = stm_hashtable_entry_userdata; _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit