[aot] Fix the encoding/decoding of generic parameters after 835cc6eda9fb6edc6e5177444...
[mono.git] / mono / metadata / monitor.c
index 0d9001be1a05514840d263c456affd595d3765e7..d4dd2ee371c21f5d3fa3cec11df7c0cde47b9c03 100644 (file)
@@ -20,7 +20,7 @@
 #include <mono/io-layer/io-layer.h>
 #include <mono/metadata/object-internals.h>
 #include <mono/metadata/class-internals.h>
-#include <mono/metadata/gc-internal.h>
+#include <mono/metadata/gc-internals.h>
 #include <mono/metadata/method-builder.h>
 #include <mono/metadata/debug-helpers.h>
 #include <mono/metadata/tabledefs.h>
@@ -76,8 +76,8 @@ struct _MonitorArray {
        MonoThreadsSync monitors [MONO_ZERO_LEN_ARRAY];
 };
 
-#define mono_monitor_allocator_lock() mono_mutex_lock (&monitor_mutex)
-#define mono_monitor_allocator_unlock() mono_mutex_unlock (&monitor_mutex)
+#define mono_monitor_allocator_lock() mono_os_mutex_lock (&monitor_mutex)
+#define mono_monitor_allocator_unlock() mono_os_mutex_unlock (&monitor_mutex)
 static mono_mutex_t monitor_mutex;
 static MonoThreadsSync *monitor_freelist;
 static MonitorArray *monitor_allocated;
@@ -248,7 +248,7 @@ lock_word_new_flat (gint32 owner)
 void
 mono_monitor_init (void)
 {
-       mono_mutex_init_recursive (&monitor_mutex);
+       mono_os_mutex_init_recursive (&monitor_mutex);
 }
  
 void
@@ -257,7 +257,7 @@ mono_monitor_cleanup (void)
        MonoThreadsSync *mon;
        /* MonitorArray *marray, *next = NULL; */
 
-       /*mono_mutex_destroy (&monitor_mutex);*/
+       /*mono_os_mutex_destroy (&monitor_mutex);*/
 
        /* The monitors on the freelist don't have weak links - mark them */
        for (mon = monitor_freelist; mon; mon = mon->data)
@@ -331,7 +331,7 @@ mono_locks_dump (gboolean include_untaken)
                                        to_recycle++;
                        } else {
                                if (!monitor_is_on_freelist (mon->data)) {
-                                       MonoObject *holder = mono_gc_weak_link_get (&mon->data);
+                                       MonoObject *holder = (MonoObject *)mono_gchandle_get_target ((guint32)mon->data);
                                        if (mon_status_get_owner (mon->status)) {
                                                g_print ("Lock %p in object %p held by thread %d, nest level: %d\n",
                                                        mon, holder, mon_status_get_owner (mon->status), mon->nest);
@@ -387,7 +387,7 @@ mon_new (gsize id)
                new = NULL;
                for (marray = monitor_allocated; marray; marray = marray->next) {
                        for (i = 0; i < marray->num_monitors; ++i) {
-                               if (marray->monitors [i].data == NULL) {
+                               if (mono_gchandle_get_target ((guint32)marray->monitors [i].data) == NULL) {
                                        new = &marray->monitors [i];
                                        if (new->wait_list) {
                                                /* Orphaned events left by aborted threads */
@@ -397,7 +397,7 @@ mon_new (gsize id)
                                                        new->wait_list = g_slist_remove (new->wait_list, new->wait_list->data);
                                                }
                                        }
-                                       mono_gc_weak_link_remove (&new->data, TRUE);
+                                       mono_gchandle_free ((guint32)new->data);
                                        new->data = monitor_freelist;
                                        monitor_freelist = new;
                                }
@@ -410,7 +410,7 @@ mon_new (gsize id)
                if (!monitor_freelist) {
                        MonitorArray *last;
                        LOCK_DEBUG (g_message ("%s: allocating more monitors: %d", __func__, array_size));
-                       marray = g_malloc0 (sizeof (MonoArray) + array_size * sizeof (MonoThreadsSync));
+                       marray = g_malloc0 (MONO_SIZEOF_MONO_ARRAY + array_size * sizeof (MonoThreadsSync));
                        marray->num_monitors = array_size;
                        array_size *= 2;
                        /* link into the freelist */
@@ -454,7 +454,7 @@ alloc_mon (MonoObject *obj, gint32 id)
 
        mono_monitor_allocator_lock ();
        mon = mon_new (id);
-       mono_gc_weak_link_add (&mon->data, obj, TRUE);
+       mon->data = (void *)(size_t)mono_gchandle_new_weakref (obj, TRUE);
        mono_monitor_allocator_unlock ();
 
        return mon;
@@ -465,7 +465,7 @@ static void
 discard_mon (MonoThreadsSync *mon)
 {
        mono_monitor_allocator_lock ();
-       mono_gc_weak_link_remove (&mon->data, TRUE);
+       mono_gchandle_free ((guint32)mon->data);
        mon_finalize (mon);
        mono_monitor_allocator_unlock ();
 }
@@ -1036,8 +1036,8 @@ mono_monitor_exit (MonoObject *obj)
                mono_monitor_exit_flat (obj, lw);
 }
 
-void**
-mono_monitor_get_object_monitor_weak_link (MonoObject *object)
+guint32
+mono_monitor_get_object_monitor_gchandle (MonoObject *object)
 {
        LockWord lw;
 
@@ -1045,10 +1045,9 @@ mono_monitor_get_object_monitor_weak_link (MonoObject *object)
 
        if (lock_word_is_inflated (lw)) {
                MonoThreadsSync *mon = lock_word_get_inflated_lock (lw);
-               if (mon->data)
-                       return &mon->data;
+               return (guint32)mon->data;
        }
-       return NULL;
+       return 0;
 }
 
 /*