MonoClass *klass;
MonoDelegate *load_value;
MonoMethod *method;
- MonoMethodMessage *msg;
- MonoMethod *im;
MonoVTable *vtable;
/* FIXME: this should likely iterate all the domains, instead */
klass = load_value->object.vtable->klass;
method = mono_class_get_method_from_name (klass, "BeginInvoke", -1);
g_assert (method != NULL);
- im = mono_get_delegate_invoke (method->klass);
- msg = mono_method_call_message_new (method, NULL, im, NULL, NULL);
- mono_thread_pool_add ((MonoObject *) load_value, msg, NULL, NULL);
+
+ mono_thread_pool_begin_invoke (domain, (MonoObject*) load_value, method, NULL);
}
static int need_cancel = FALSE;
static MonoAsyncResult *
mono_delegate_begin_invoke (MonoDelegate *delegate, gpointer *params)
{
- MonoMethodMessage *msg;
- MonoDelegate *async_callback;
MonoMulticastDelegate *mcast_delegate;
- MonoObject *state;
- MonoMethod *im;
MonoClass *klass;
- MonoMethod *method = NULL, *method2 = NULL;
+ MonoMethod *method;
g_assert (delegate);
mcast_delegate = (MonoMulticastDelegate *) delegate;
/* If the target is a proxy, make a direct call. Is proxy's work
// to make the call asynchronous.
*/
+ MonoMethodMessage *msg;
+ MonoDelegate *async_callback;
+ MonoObject *state;
MonoAsyncResult *ares;
MonoObject *exc;
MonoArray *out_args;
klass = delegate->object.vtable->klass;
- method = mono_get_delegate_invoke (klass);
- method2 = mono_class_get_method_from_name (klass, "BeginInvoke", -1);
- if (method2)
- method = method2;
- g_assert (method != NULL);
-
- im = mono_get_delegate_invoke (method->klass);
- msg = mono_method_call_message_new (method, params, im, &async_callback, &state);
+ method = mono_class_get_method_from_name (klass, "BeginInvoke", -1);
+ if (!method)
+ method = mono_get_delegate_invoke (klass);
+ g_assert (method);
- return mono_thread_pool_add ((MonoObject *)delegate, msg, async_callback, state);
+ return mono_thread_pool_begin_invoke (mono_domain_get (), (MonoObject*) delegate, method, params);
}
#ifndef DISABLE_JIT
} else
#endif
{
- res = mono_thread_pool_finish (ares, &out_args, &exc);
+ res = mono_thread_pool_end_invoke (ares, &out_args, &exc);
}
if (exc) {
}
MonoAsyncResult *
-mono_threadpool_ms_add (MonoObject *target, MonoMethodMessage *msg, MonoDelegate *async_callback, MonoObject *state)
+mono_threadpool_ms_begin_invoke (MonoDomain *domain, MonoObject *target, MonoMethod *method, gpointer *params)
{
static MonoClass *async_call_klass = NULL;
- MonoDomain *domain;
- MonoAsyncResult *ares;
- MonoAsyncCall *ac;
+ MonoMethodMessage *message;
+ MonoAsyncResult *async_result;
+ MonoAsyncCall *async_call;
+ MonoDelegate *async_callback = NULL;
+ MonoObject *state = NULL;
if (!async_call_klass)
async_call_klass = mono_class_from_name (mono_defaults.corlib, "System", "MonoAsyncCall");
ensure_initialized (NULL);
- domain = mono_domain_get ();
+ message = mono_method_call_message_new (method, params, mono_get_delegate_invoke (method->klass), (params != NULL) ? (&async_callback) : NULL, (params != NULL) ? (&state) : NULL);
- ac = (MonoAsyncCall*) mono_object_new (domain, async_call_klass);
- MONO_OBJECT_SETREF (ac, msg, msg);
- MONO_OBJECT_SETREF (ac, state, state);
+ async_call = (MonoAsyncCall*) mono_object_new (domain, async_call_klass);
+ MONO_OBJECT_SETREF (async_call, msg, message);
+ MONO_OBJECT_SETREF (async_call, state, state);
if (async_callback) {
- MONO_OBJECT_SETREF (ac, cb_method, mono_get_delegate_invoke (((MonoObject*) async_callback)->vtable->klass));
- MONO_OBJECT_SETREF (ac, cb_target, async_callback);
+ MONO_OBJECT_SETREF (async_call, cb_method, mono_get_delegate_invoke (((MonoObject*) async_callback)->vtable->klass));
+ MONO_OBJECT_SETREF (async_call, cb_target, async_callback);
}
- ares = mono_async_result_new (domain, NULL, ac->state, NULL, (MonoObject*) ac);
- MONO_OBJECT_SETREF (ares, async_delegate, target);
+ async_result = mono_async_result_new (domain, NULL, async_call->state, NULL, (MonoObject*) async_call);
+ MONO_OBJECT_SETREF (async_result, async_delegate, target);
#ifndef DISABLE_SOCKETS
if (mono_threadpool_ms_is_io (target, state))
- return mono_threadpool_ms_io_add (ares, (MonoSocketAsyncResult*) state);
+ return mono_threadpool_ms_io_add (async_result, (MonoSocketAsyncResult*) state);
#endif
- mono_threadpool_ms_enqueue_work_item (domain, (MonoObject*) ares);
- return ares;
+ mono_threadpool_ms_enqueue_work_item (domain, (MonoObject*) async_result);
+
+ return async_result;
}
MonoObject *
-mono_threadpool_ms_finish (MonoAsyncResult *ares, MonoArray **out_args, MonoObject **exc)
+mono_threadpool_ms_end_invoke (MonoAsyncResult *ares, MonoArray **out_args, MonoObject **exc)
{
MonoAsyncCall *ac;
mono_threadpool_ms_cleanup (void);
MonoAsyncResult *
-mono_threadpool_ms_add (MonoObject *target, MonoMethodMessage *msg, MonoDelegate *async_callback, MonoObject *state);
+mono_threadpool_ms_begin_invoke (MonoDomain *domain, MonoObject *target, MonoMethod *method, gpointer *params);
MonoObject *
-mono_threadpool_ms_finish (MonoAsyncResult *ares, MonoArray **out_args, MonoObject **exc);
+mono_threadpool_ms_end_invoke (MonoAsyncResult *ares, MonoArray **out_args, MonoObject **exc);
gboolean
mono_threadpool_ms_remove_domain_jobs (MonoDomain *domain, int timeout);
}
MonoAsyncResult *
-mono_thread_pool_add (MonoObject *target, MonoMethodMessage *msg, MonoDelegate *async_callback,
- MonoObject *state)
+mono_thread_pool_begin_invoke (MonoDomain *domain, MonoObject *target, MonoMethod *method, gpointer *params)
{
- MonoDomain *domain;
- MonoAsyncResult *ares;
- MonoAsyncCall *ac;
+ MonoMethodMessage *message;
+ MonoAsyncResult *async_result;
+ MonoAsyncCall *async_call;
+ MonoDelegate *async_callback = NULL;
+ MonoObject *state = NULL;
if (use_ms_threadpool ())
- return mono_threadpool_ms_add (target, msg, async_callback, state);
+ return mono_threadpool_ms_begin_invoke (domain, target, method, params);
- domain = mono_domain_get ();
+ message = mono_method_call_message_new (method, params, mono_get_delegate_invoke (method->klass), (params != NULL) ? (&async_callback) : NULL, (params != NULL) ? (&state) : NULL);
- ac = (MonoAsyncCall*)mono_object_new (domain, async_call_klass);
- MONO_OBJECT_SETREF (ac, msg, msg);
- MONO_OBJECT_SETREF (ac, state, state);
+ async_call = (MonoAsyncCall*)mono_object_new (domain, async_call_klass);
+ MONO_OBJECT_SETREF (async_call, msg, message);
+ MONO_OBJECT_SETREF (async_call, state, state);
if (async_callback) {
- ac->cb_method = mono_get_delegate_invoke (((MonoObject *)async_callback)->vtable->klass);
- MONO_OBJECT_SETREF (ac, cb_target, async_callback);
+ async_call->cb_method = mono_get_delegate_invoke (((MonoObject*) async_callback)->vtable->klass);
+ MONO_OBJECT_SETREF (async_call, cb_target, async_callback);
}
- ares = mono_async_result_new (domain, NULL, ac->state, NULL, (MonoObject*)ac);
- MONO_OBJECT_SETREF (ares, async_delegate, target);
+ async_result = mono_async_result_new (domain, NULL, async_call->state, NULL, (MonoObject*) async_call);
+ MONO_OBJECT_SETREF (async_result, async_delegate, target);
#ifndef DISABLE_SOCKETS
if (socket_io_filter (target, state)) {
- socket_io_add (ares, (MonoSocketAsyncResult *) state);
- return ares;
+ socket_io_add (async_result, (MonoSocketAsyncResult *) state);
+ return async_result;
}
#endif
- threadpool_append_job (&async_tp, (MonoObject *) ares);
- return ares;
+ threadpool_append_job (&async_tp, (MonoObject *) async_result);
+ return async_result;
}
MonoObject *
-mono_thread_pool_finish (MonoAsyncResult *ares, MonoArray **out_args, MonoObject **exc)
+mono_thread_pool_end_invoke (MonoAsyncResult *ares, MonoArray **out_args, MonoObject **exc)
{
MonoAsyncCall *ac;
HANDLE wait_event;
if (use_ms_threadpool ()) {
- return mono_threadpool_ms_finish (ares, out_args, exc);
+ return mono_threadpool_ms_end_invoke (ares, out_args, exc);
}
*exc = NULL;
void icall_append_job (MonoObject *ar);
void icall_append_io_job (MonoObject *target, MonoSocketAsyncResult *state);
+
MonoAsyncResult *
-mono_thread_pool_add (MonoObject *target, MonoMethodMessage *msg,
- MonoDelegate *async_callback, MonoObject *state);
+mono_thread_pool_begin_invoke (MonoDomain *domain, MonoObject *target, MonoMethod *method, gpointer *params);
MonoObject *
-mono_thread_pool_finish (MonoAsyncResult *ares, MonoArray **out_args,
- MonoObject **exc);
+mono_thread_pool_end_invoke (MonoAsyncResult *ares, MonoArray **out_args, MonoObject **exc);
void mono_thread_pool_cleanup (void);