X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fthreadpool-ms-io.c;h=7cdaf5be6842228814efe36fa9922ba81fbe4ea5;hb=a1af4392231c64d6a50a72f0518dd52369d46915;hp=30e34e50a3c5bcdd5dc096fd8154953cafd9c690;hpb=c92b046a661169fec8302d7ff17454d5b63d108b;p=mono.git diff --git a/mono/metadata/threadpool-ms-io.c b/mono/metadata/threadpool-ms-io.c index 30e34e50a3c..7cdaf5be684 100644 --- a/mono/metadata/threadpool-ms-io.c +++ b/mono/metadata/threadpool-ms-io.c @@ -5,6 +5,7 @@ * Ludovic Henry (ludovic.henry@xamarin.com) * * Copyright 2015 Xamarin, Inc (http://www.xamarin.com) + * Licensed under the MIT license. See LICENSE file in the project root for full license information. */ #include @@ -31,7 +32,6 @@ typedef struct { gboolean (*init) (gint wakeup_pipe_fd); - void (*cleanup) (void); void (*register_fd) (gint fd, gint events, gboolean is_new); void (*remove_fd) (gint fd); gint (*event_wait) (void (*callback) (gint fd, gint events, gpointer user_data), gpointer user_data); @@ -273,7 +273,7 @@ wait_callback (gint fd, gint events, gpointer user_data) MonoIOSelectorJob *job = get_job_for_event (&list, EVENT_IN); if (job) { mono_threadpool_ms_enqueue_work_item (((MonoObject*) job)->vtable->domain, (MonoObject*) job, &error); - mono_error_raise_exception (&error); /* FIXME don't raise here */ + mono_error_assert_ok (&error); } } @@ -281,7 +281,7 @@ wait_callback (gint fd, gint events, gpointer user_data) MonoIOSelectorJob *job = get_job_for_event (&list, EVENT_OUT); if (job) { mono_threadpool_ms_enqueue_work_item (((MonoObject*) job)->vtable->domain, (MonoObject*) job, &error); - mono_error_raise_exception (&error); /* FIXME don't raise here */ + mono_error_assert_ok (&error); } } @@ -347,7 +347,8 @@ selector_thread (gpointer data) g_assert (job); exists = mono_g_hash_table_lookup_extended (states, GINT_TO_POINTER (fd), &k, (gpointer*) &list); - list = mono_mlist_append (list, (MonoObject*) job); + list = mono_mlist_append_checked (list, (MonoObject*) job, &error); + mono_error_assert_ok (&error); mono_g_hash_table_replace (states, GINT_TO_POINTER (fd), list); operations = get_operations_for_jobs (list); @@ -378,7 +379,7 @@ selector_thread (gpointer data) for (; list; list = mono_mlist_remove_item (list, list)) { mono_threadpool_ms_enqueue_work_item (mono_object_domain (mono_mlist_get_data (list)), mono_mlist_get_data (list), &error); - mono_error_raise_exception (&error); /* FIXME don't raise here */ + mono_error_assert_ok (&error); } mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_IO_THREADPOOL, "io threadpool: del fd %3d", fd); @@ -536,8 +537,9 @@ initialize (void) if (!threadpool_io->backend.init (threadpool_io->wakeup_pipes [0])) g_error ("initialize: backend->init () failed"); - if (!mono_thread_create_internal (mono_get_root_domain (), selector_thread, NULL, TRUE, SMALL_STACK)) - g_error ("initialize: mono_thread_create_internal () failed"); + MonoError error; + if (!mono_thread_create_internal (mono_get_root_domain (), selector_thread, NULL, TRUE, SMALL_STACK, &error)) + g_error ("initialize: mono_thread_create_internal () failed due to %s", mono_error_get_message (&error)); } static void @@ -550,24 +552,6 @@ cleanup (void) selector_thread_wakeup (); while (io_selector_running) mono_thread_info_usleep (1000); - - mono_coop_mutex_destroy (&threadpool_io->updates_lock); - mono_coop_cond_destroy (&threadpool_io->updates_cond); - - threadpool_io->backend.cleanup (); - -#if !defined(HOST_WIN32) - close (threadpool_io->wakeup_pipes [0]); - close (threadpool_io->wakeup_pipes [1]); -#else - closesocket (threadpool_io->wakeup_pipes [0]); - closesocket (threadpool_io->wakeup_pipes [1]); -#endif - - g_assert (threadpool_io); - g_free (threadpool_io); - threadpool_io = NULL; - g_assert (!threadpool_io); } void @@ -581,9 +565,9 @@ ves_icall_System_IOSelector_Add (gpointer handle, MonoIOSelectorJob *job) { ThreadPoolIOUpdate *update; - g_assert (handle >= 0); + g_assert (handle); - g_assert (job->operation == EVENT_IN ^ job->operation == EVENT_OUT); + g_assert ((job->operation == EVENT_IN) ^ (job->operation == EVENT_OUT)); g_assert (job->callback); if (mono_runtime_is_shutting_down ())