Author: Armin Rigo <ar...@tunes.org> Branch: queue Changeset: r1869:72471a4e7d9e Date: 2015-06-18 21:20 +0200 http://bitbucket.org/pypy/stmgc/changeset/72471a4e7d9e/
Log: tweaks diff --git a/c8/stm/queue.c b/c8/stm/queue.c --- a/c8/stm/queue.c +++ b/c8/stm/queue.c @@ -109,9 +109,9 @@ spinlock_release(get_priv_segment(num)->active_queues_lock); } -static void queue_activate(stm_queue_t *queue) +static void queue_activate(stm_queue_t *queue, stm_queue_segment_t *seg) { - stm_queue_segment_t *seg = &queue->segs[STM_SEGMENT->segment_num - 1]; + assert(seg == &queue->segs[STM_SEGMENT->segment_num - 1]); if (!seg->active) { queue_lock_acquire(); @@ -202,13 +202,13 @@ delays or transaction breaks. you need to push roots! */ stm_queue_segment_t *seg = &queue->segs[STM_SEGMENT->segment_num - 1]; + queue_activate(queue, seg); + queue_entry_t *entry = malloc(sizeof(queue_entry_t)); assert(entry); entry->object = newitem; entry->next = seg->added_in_this_transaction; seg->added_in_this_transaction = entry; - - queue_activate(queue); seg->unfinished_tasks_in_this_transaction++; /* add qobj to 'objects_pointing_to_nursery' if it has the @@ -270,11 +270,11 @@ 'old_objects_popped' list for now. From now on, this entry "belongs" to this segment and should never be read by another segment. */ + queue_activate(queue, seg); + queue_check_entry(entry); entry->next = seg->old_objects_popped; seg->old_objects_popped = entry; - - queue_activate(queue); return entry->object; } else { @@ -322,8 +322,8 @@ void stm_queue_task_done(stm_queue_t *queue) { - queue_activate(queue); stm_queue_segment_t *seg = &queue->segs[STM_SEGMENT->segment_num - 1]; + queue_activate(queue, seg); seg->unfinished_tasks_in_this_transaction--; } _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit