Author: Armin Rigo <ar...@tunes.org> Branch: c7-refactor Changeset: r819:c39f632101a6 Date: 2014-02-24 10:44 +0100 http://bitbucket.org/pypy/stmgc/changeset/c39f632101a6/
Log: Tweaks diff --git a/c7/stm/core.c b/c7/stm/core.c --- a/c7/stm/core.c +++ b/c7/stm/core.c @@ -251,14 +251,16 @@ static void _finish_transaction(void) { + STM_PSEGMENT->safe_point = SP_NO_TRANSACTION; + STM_PSEGMENT->transaction_state = TS_NONE; + + /* reset these lists to NULL for the next transaction */ + LIST_FREE(STM_PSEGMENT->old_objects_pointing_to_nursery); + LIST_FREE(STM_PSEGMENT->overflow_objects_pointing_to_nursery); + stm_thread_local_t *tl = STM_SEGMENT->running_thread; release_thread_segment(tl); - STM_PSEGMENT->safe_point = SP_NO_TRANSACTION; - STM_PSEGMENT->transaction_state = TS_NONE; - if (STM_PSEGMENT->overflow_objects_pointing_to_nursery != NULL) { - list_free(STM_PSEGMENT->overflow_objects_pointing_to_nursery); - STM_PSEGMENT->overflow_objects_pointing_to_nursery = NULL; - } + /* cannot access STM_SEGMENT or STM_PSEGMENT from here ! */ } void stm_commit_transaction(void) @@ -315,8 +317,6 @@ static void reset_modified_from_other_segments(void) { - abort();//... -#if 0 /* pull the right versions from other threads in order to reset our pages as part of an abort */ long remote_num = 1 - STM_SEGMENT->segment_num; @@ -327,8 +327,8 @@ STM_PSEGMENT->modified_old_objects, object_t * /*item*/, ({ - /* all objects in 'modified_objects' have this flag */ - assert(item->stm_flags & GCFLAG_WRITE_BARRIER_CALLED); + /* all objects in 'modified_objects' have this flag removed */ + assert((item->stm_flags & GCFLAG_WRITE_BARRIER) == 0); /* memcpy in the opposite direction than push_modified_to_other_segments() */ @@ -337,9 +337,9 @@ ssize_t size = stmcb_size_rounded_up((struct object_s *)src); memcpy(dst, src, size); - /* copying from the other segment removed again the - WRITE_BARRIER_CALLED flag */ - assert(!(item->stm_flags & GCFLAG_WRITE_BARRIER_CALLED)); + /* copying from the other segment added again the + WRITE_BARRIER flag */ + assert(item->stm_flags & GCFLAG_WRITE_BARRIER); /* write all changes to the object before we release the write lock below. This is needed because we need to @@ -353,12 +353,11 @@ /* clear the write-lock */ uintptr_t lock_idx = (((uintptr_t)item) >> 4) - WRITELOCK_START; assert((intptr_t)lock_idx >= 0); - assert(write_locks[lock_idx]); + assert(write_locks[lock_idx] == STM_PSEGMENT->write_lock_num); write_locks[lock_idx] = 0; })); - list_clear(STM_PSEGMENT->modified_objects); -#endif + list_clear(STM_PSEGMENT->modified_old_objects); } static void abort_with_mutex(void) diff --git a/c7/stm/list.h b/c7/stm/list.h --- a/c7/stm/list.h +++ b/c7/stm/list.h @@ -13,6 +13,8 @@ free(lst); } +#define LIST_FREE(lst) (list_free(lst), (lst) = NULL) + static struct list_s *_list_grow(struct list_s *, uintptr_t); diff --git a/c7/stm/nursery.c b/c7/stm/nursery.c --- a/c7/stm/nursery.c +++ b/c7/stm/nursery.c @@ -26,6 +26,10 @@ assert(_STM_FAST_ALLOC <= NURSERY_SIZE); _stm_nursery_start = NURSERY_START; _stm_nursery_end = NURSERY_END; + + long i; + for (i = 0; i < NB_SEGMENTS; i++) + get_segment(i)->nursery_current = (stm_char *)NURSERY_START; } static void teardown_nursery(void) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit