[sgen] Don't stop concurrent mark during nursery collections.
authorMark Probst <mark.probst@gmail.com>
Thu, 16 Apr 2015 19:18:45 +0000 (12:18 -0700)
committerVlad Brezae <brezaevlad@gmail.com>
Mon, 31 Aug 2015 21:24:46 +0000 (14:24 -0700)
mono/sgen/sgen-gc.c
mono/sgen/sgen-workers.c
mono/sgen/sgen-workers.h

index f2227aa9f7282017e211ac0c9cc27f206420ef84..3314ffbb1266ea6276add6e053597e6859d7b994 100644 (file)
@@ -2332,13 +2332,9 @@ sgen_perform_collection (size_t requested_size, int generation_to_collect, const
                        major_finish_concurrent_collection (wait_to_finish);
                        oldest_generation_collected = GENERATION_OLD;
                } else {
-                       sgen_workers_signal_start_nursery_collection_and_wait ();
-
                        major_update_concurrent_collection ();
                        if (generation_to_collect == GENERATION_NURSERY)
                                collect_nursery (NULL, FALSE);
-
-                       sgen_workers_signal_finish_nursery_collection ();
                }
 
                goto done;
index b26234298473a093bf81712b97b50e6fa6515506..00b87d10d53c4b406a8516c12faa0a686d871e3c 100644 (file)
@@ -180,30 +180,6 @@ sgen_workers_wait_for_jobs_finished (void)
        sgen_workers_ensure_awake ();
 }
 
-void
-sgen_workers_signal_start_nursery_collection_and_wait (void)
-{
-       State old_state;
-
-       do {
-               old_state = workers_state;
-
-               if (old_state != STATE_NOT_WORKING)
-                       SGEN_ASSERT (0, old_state != STATE_NURSERY_COLLECTION, "Why are we transitioning to NURSERY COLLECTION when we're already there?");
-       } while (!set_state (old_state, STATE_NURSERY_COLLECTION));
-
-       sgen_thread_pool_idle_wait ();
-
-       assert_nursery_collection (workers_state);
-}
-
-void
-sgen_workers_signal_finish_nursery_collection (void)
-{
-       assert_nursery_collection (workers_state);
-       workers_signal_enqueue_work (TRUE);
-}
-
 static gboolean
 workers_get_work (WorkerData *data)
 {
@@ -270,7 +246,6 @@ marker_idle_func (void *data_untyped)
                return;
 
        SGEN_ASSERT (0, sgen_concurrent_collection_in_progress (), "The worker should only mark in concurrent collections.");
-       SGEN_ASSERT (0, sgen_get_current_collection_generation () != GENERATION_NURSERY, "Why are we doing work while there's a nursery collection happening?");
 
        if (workers_state == STATE_WORK_ENQUEUED) {
                set_state (STATE_WORK_ENQUEUED, STATE_WORKING);
index 82cf26d00f1beae92002b293c68b9b01454f8a0e..6b549dded153c725c8317d99b83bf21396f8a058 100644 (file)
@@ -42,7 +42,4 @@ gboolean sgen_workers_are_working (void);
 void sgen_workers_wait (void);
 SgenSectionGrayQueue* sgen_workers_get_distribute_section_gray_queue (void);
 
-void sgen_workers_signal_start_nursery_collection_and_wait (void);
-void sgen_workers_signal_finish_nursery_collection (void);
-
 #endif