[sgen] Use raw mutex for pin_queue_mutex as it's only used during a collection
authorLudovic Henry <ludovic@xamarin.com>
Thu, 2 Jun 2016 21:25:04 +0000 (23:25 +0200)
committerLudovic Henry <ludovic@xamarin.com>
Thu, 2 Jun 2016 21:25:31 +0000 (23:25 +0200)
mono/sgen/sgen-pinning.c

index cfe3db1acd0167bd08d1c7e285b6313736460ec3..6b2b2e33547f2c2009616a0d628c00a4fd6fa14b 100644 (file)
@@ -26,7 +26,7 @@ static size_t last_num_pinned = 0;
  * stay pinned, which means they can't move, therefore they can be scanned.
  */
 static SgenPointerQueue pin_queue_objs;
-static MonoCoopMutex pin_queue_mutex;
+static mono_mutex_t pin_queue_mutex;
 
 #define PIN_HASH_SIZE 1024
 static void *pin_hash_filter [PIN_HASH_SIZE];
@@ -34,13 +34,13 @@ static void *pin_hash_filter [PIN_HASH_SIZE];
 void
 sgen_pinning_init (void)
 {
-       mono_coop_mutex_init (&pin_queue_mutex);
+       mono_os_mutex_init (&pin_queue_mutex);
 }
 
 void
 sgen_init_pinning (void)
 {
-       mono_coop_mutex_lock (&pin_queue_mutex);
+       mono_os_mutex_lock (&pin_queue_mutex);
        memset (pin_hash_filter, 0, sizeof (pin_hash_filter));
        pin_queue.mem_type = INTERNAL_MEM_PIN_QUEUE;
        sgen_pointer_queue_clear (&pin_queue_objs);
@@ -51,7 +51,7 @@ sgen_finish_pinning (void)
 {
        last_num_pinned = pin_queue.next_slot;
        sgen_pointer_queue_clear (&pin_queue);
-       mono_coop_mutex_unlock (&pin_queue_mutex);
+       mono_os_mutex_unlock (&pin_queue_mutex);
 }
 
 void
@@ -66,12 +66,12 @@ sgen_scan_pin_queue_objects (ScanCopyContext ctx)
        int i;
        ScanObjectFunc scan_func = ctx.ops->scan_object;
 
-       mono_coop_mutex_lock (&pin_queue_mutex);
+       mono_os_mutex_lock (&pin_queue_mutex);
        for (i = 0; i < pin_queue_objs.next_slot; ++i) {
                GCObject *obj = (GCObject *)pin_queue_objs.data [i];
                scan_func (obj, sgen_obj_get_descriptor_safe (obj), ctx.queue);
        }
-       mono_coop_mutex_unlock (&pin_queue_mutex);
+       mono_os_mutex_unlock (&pin_queue_mutex);
 }
 
 void