if (ares->execution_context) {
/* use captured ExecutionContext (if available) */
thread = mono_thread_current ();
- MONO_OBJECT_SETREF (ares, original_context, thread->execution_context);
- MONO_OBJECT_SETREF (thread, execution_context, ares->execution_context);
+ MONO_OBJECT_SETREF (ares, original_context, mono_thread_get_execution_context ());
+ mono_thread_set_execution_context (ares->execution_context);
} else {
ares->original_context = NULL;
}
/* restore original thread execution context if flow isn't suppressed, i.e. non null */
if (ares->original_context) {
- MONO_OBJECT_SETREF (thread, execution_context, ares->original_context);
+ mono_thread_set_execution_context (ares->original_context);
ares->original_context = NULL;
}
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);
}
if (!list->array) {
MONO_GC_REGISTER_ROOT (list->array);
- list->array = mono_array_new (mono_get_root_domain (), mono_defaults.object_class, 16);
+ list->array = mono_array_new_cached (mono_get_root_domain (), mono_defaults.object_class, 16);
} else {
int count = list->next_elem - list->first_elem;
/* slide the array or create a larger one if it's full */
if (list->first_elem) {
mono_array_memcpy_refs (list->array, 0, list->array, list->first_elem, count);
} else {
- MonoArray *newa = mono_array_new (mono_get_root_domain (), mono_defaults.object_class, mono_array_length (list->array) * 2);
+ MonoArray *newa = mono_array_new_cached (mono_get_root_domain (), mono_defaults.object_class, mono_array_length (list->array) * 2);
mono_array_memcpy_refs (newa, 0, list->array, list->first_elem, count);
list->array = newa;
}
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 */
if (mono_array_length (list->array) > 16 && count < (mono_array_length (list->array) / 3)) {
- MonoArray *newa = mono_array_new (mono_get_root_domain (), mono_defaults.object_class, mono_array_length (list->array) / 2);
+ MonoArray *newa = mono_array_new_cached (mono_get_root_domain (), mono_defaults.object_class, mono_array_length (list->array) / 2);
mono_array_memcpy_refs (newa, 0, list->array, list->first_elem, count);
list->array = newa;
list->first_elem = 0;