2009-08-12 Mark Probst <mark.probst@gmail.com>
[mono.git] / mono / metadata / threadpool.c
index 3f445bb2f0467da37269bf9da0a252725bda708e..4bc6db7340703b4560481c0c0e3ce0c9114661ed 100644 (file)
@@ -1116,6 +1116,9 @@ mono_thread_pool_add (MonoObject *target, MonoMethodMessage *msg, MonoDelegate *
        ares = mono_async_result_new (domain, NULL, ac->state, NULL, (MonoObject*)ac);
        MONO_OBJECT_SETREF (ares, async_delegate, target);
 
+       if (domain->state == MONO_APPDOMAIN_UNLOADED || domain->state == MONO_APPDOMAIN_UNLOADING)
+               return ares;
+
        EnterCriticalSection (&ares_lock);
        mono_g_hash_table_insert (ares_htable, ares, ares);
        LeaveCriticalSection (&ares_lock);
@@ -1331,6 +1334,7 @@ dequeue_job (CRITICAL_SECTION *cs, TPQueue *list)
                return NULL;
        }
        ar = mono_array_get (list->array, MonoObject*, list->first_elem);
+       mono_array_setref (list->array, list->first_elem, NULL);
        list->first_elem++;
        count = list->next_elem - list->first_elem;
        /* reduce the size of the array if it's mostly empty */