X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fmonitor.c;h=702a47c654f285402c0cad5bb601f345e3a78ef1;hb=8bbca2bada9398b3a5ddfec0c3c890054c1e8bdc;hp=0b1e938f3d857069e9a5a47bf10127b297de6fac;hpb=66d4425f049880bca9241e0aacf7482ecfc248e0;p=mono.git diff --git a/mono/metadata/monitor.c b/mono/metadata/monitor.c index 0b1e938f3d8..702a47c654f 100644 --- a/mono/metadata/monitor.c +++ b/mono/metadata/monitor.c @@ -1,5 +1,6 @@ -/* - * monitor.c: Monitor locking functions +/** + * \file + * Monitor locking functions * * Author: * Dick Porter (dick@ximian.com) @@ -18,7 +19,6 @@ #include #include #include -#include #include #include #include @@ -31,6 +31,7 @@ #include #include #include +#include /* * Pull the list of opcodes @@ -307,10 +308,9 @@ monitor_is_on_freelist (MonoThreadsSync *mon) /** * mono_locks_dump: - * @include_untaken: - * + * \param include_untaken Whether to list unheld inflated locks. * Print a report on stdout of the managed locks currently held by - * threads. If @include_untaken is specified, list also inflated locks + * threads. If \p include_untaken is specified, list also inflated locks * which are unheld. * This is supposed to be used in debuggers like gdb. */ @@ -396,7 +396,7 @@ mon_new (gsize id) /* Orphaned events left by aborted threads */ while (new_->wait_list) { LOCK_DEBUG (g_message (G_GNUC_PRETTY_FUNCTION ": (%d): Closing orphaned event %d", mono_thread_info_get_small_id (), new_->wait_list->data)); - CloseHandle (new_->wait_list->data); + mono_w32event_close (new_->wait_list->data); new_->wait_list = g_slist_remove (new_->wait_list, new_->wait_list->data); } } @@ -801,7 +801,7 @@ retry: return 0; } - mono_profiler_monitor_event (obj, MONO_PROFILER_MONITOR_CONTENTION); + MONO_PROFILER_RAISE (monitor_contention, (obj)); /* The slow path begins here. */ retry_contended: @@ -824,7 +824,7 @@ retry_contended: if (G_LIKELY (tmp_status == old_status)) { /* Success */ g_assert (mon->nest == 1); - mono_profiler_monitor_event (obj, MONO_PROFILER_MONITOR_DONE); + MONO_PROFILER_RAISE (monitor_acquired, (obj)); return 1; } } @@ -832,7 +832,7 @@ retry_contended: /* If the object is currently locked by this thread... */ if (mon_status_get_owner (old_status) == id) { mon->nest++; - mono_profiler_monitor_event (obj, MONO_PROFILER_MONITOR_DONE); + MONO_PROFILER_RAISE (monitor_acquired, (obj)); return 1; } @@ -891,7 +891,7 @@ retry_contended: * */ if (allow_interruption) { - if (!mono_thread_test_and_set_state (thread, (MonoThreadState)(ThreadState_StopRequested | ThreadState_AbortRequested), ThreadState_WaitSleepJoin)) { + if (!mono_thread_test_and_set_state (thread, ThreadState_AbortRequested, ThreadState_WaitSleepJoin)) { wait_ret = MONO_SEM_TIMEDWAIT_RET_ALERTED; goto done_waiting; } @@ -918,7 +918,7 @@ done_waiting: * We have to obey a stop/suspend request even if * allow_interruption is FALSE to avoid hangs at shutdown. */ - if (!mono_thread_test_state (mono_thread_internal_current (), (MonoThreadState)(ThreadState_StopRequested | ThreadState_SuspendRequested | ThreadState_AbortRequested))) { + if (!mono_thread_test_state (mono_thread_internal_current (), ThreadState_SuspendRequested | ThreadState_AbortRequested)) { if (ms != MONO_INFINITE_WAIT) { now = mono_msec_ticks (); @@ -946,7 +946,7 @@ done_waiting: /* Timed out or interrupted */ mon_decrement_entry_count (mon); - mono_profiler_monitor_event (obj, MONO_PROFILER_MONITOR_FAIL); + MONO_PROFILER_RAISE (monitor_failed, (obj)); if (wait_ret == MONO_SEM_TIMEDWAIT_RET_ALERTED) { LOCK_DEBUG (g_message ("%s: (%d) interrupted waiting, returning -1", __func__, id)); @@ -1049,6 +1049,9 @@ mono_monitor_enter_internal (MonoObject *obj) return TRUE; } +/** + * mono_monitor_enter: + */ gboolean mono_monitor_enter (MonoObject *obj) { @@ -1067,6 +1070,9 @@ mono_monitor_enter_fast (MonoObject *obj) return mono_monitor_try_enter_internal (obj, 0, FALSE) == 1; } +/** + * mono_monitor_try_enter: + */ gboolean mono_monitor_try_enter (MonoObject *obj, guint32 ms) { @@ -1077,6 +1083,9 @@ mono_monitor_try_enter (MonoObject *obj, guint32 ms) return mono_monitor_try_enter_internal (obj, ms, FALSE) == 1; } +/** + * mono_monitor_exit: + */ void mono_monitor_exit (MonoObject *obj) { @@ -1160,6 +1169,9 @@ ves_icall_System_Threading_Monitor_Monitor_try_enter_with_atomic_var (MonoObject *lockTaken = res == 1; } +/** + * mono_monitor_enter_v4: + */ void mono_monitor_enter_v4 (MonoObject *obj, char *lock_taken) { @@ -1352,7 +1364,7 @@ ves_icall_System_Threading_Monitor_Monitor_wait (MonoObject *obj, guint32 ms) /* This looks superfluous */ if (mono_thread_current_check_pending_interrupt ()) { - CloseHandle (event); + mono_w32event_close (event); return FALSE; } @@ -1431,7 +1443,7 @@ ves_icall_System_Threading_Monitor_Monitor_wait (MonoObject *obj, guint32 ms) */ mon->wait_list = g_slist_remove (mon->wait_list, event); } - CloseHandle (event); + mono_w32event_close (event); return success; }