Patch for bug #62532 implemention of a kqueue/kevent based FileSystemWatcher.
[mono.git] / mono / metadata / threadpool.c
index 0b43eb88e31aeddcd788e6ce48e316f9fcb13c0c..0803f0f846299acfbcc14cc917797b6cb2dc269a 100644 (file)
 #define _WIN32_WINNT 0x0500
 #endif
 
-#include <mono/metadata/appdomain.h>
+#include <mono/metadata/domain-internals.h>
 #include <mono/metadata/tabledefs.h>
 #include <mono/metadata/threads.h>
+#include <mono/metadata/threads-types.h>
 #include <mono/metadata/exception.h>
 #include <mono/metadata/file-io.h>
 #include <mono/metadata/monitor.h>
 
 /* maximum number of worker threads */
 int mono_max_worker_threads = 25; /* fixme: should be 25 per available CPU */
-int mono_min_worker_threads = 0;
+static int mono_min_worker_threads = 0;
 
 /* current number of worker threads */
 static int mono_worker_threads = 0;
 
 /* current number of busy threads */
-int busy_worker_threads = 0;
+static int busy_worker_threads = 0;
 
 /* we use this to store a reference to the AsyncResult to avoid GC */
 static MonoGHashTable *ares_htable = NULL;
@@ -81,7 +82,7 @@ mono_async_invoke (MonoAsyncResult *ares)
        }
 
        /* notify listeners */
-       if(!mono_monitor_try_enter ((MonoObject *) ares, INFINITE))
+       if(!mono_monitor_enter ((MonoObject *) ares))
                return;
        
        if (ares->handle != NULL) {
@@ -121,6 +122,7 @@ mono_thread_pool_add (MonoObject *target, MonoMethodMessage *msg, MonoDelegate *
        ares->async_delegate = target;
 
        if (!ares_htable) {
+               MONO_GC_REGISTER_ROOT (ares_htable);
                ares_htable = mono_g_hash_table_new (NULL, NULL);
                job_added = CreateSemaphore (NULL, 0, 0x7fffffff, NULL);
        }
@@ -151,7 +153,7 @@ mono_thread_pool_finish (MonoAsyncResult *ares, MonoArray **out_args, MonoObject
        *out_args = NULL;
 
        /* check if already finished */
-       if (!mono_monitor_try_enter ((MonoObject *) ares, INFINITE)) {
+       if (!mono_monitor_enter ((MonoObject *) ares)) {
                return NULL;
        }