X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fmonitor.c;h=d3b51abfc80247f536fdb2410f28edf528411200;hb=HEAD;hp=f527693be93cec5d2ee9dc1b34c6023d85718768;hpb=648916b0281598bcd863ba02c25eaab932972030;p=mono.git diff --git a/mono/metadata/monitor.c b/mono/metadata/monitor.c index f527693be93..d3b51abfc80 100644 --- a/mono/metadata/monitor.c +++ b/mono/metadata/monitor.c @@ -32,6 +32,7 @@ #include #include #include +#include /* * Pull the list of opcodes @@ -308,10 +309,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. */ @@ -374,7 +374,7 @@ mon_finalize (MonoThreadsSync *mon) mon->data = monitor_freelist; monitor_freelist = mon; #ifndef DISABLE_PERFCOUNTERS - mono_perfcounters->gc_sync_blocks--; + InterlockedDecrement (&mono_perfcounters->gc_sync_blocks); #endif } @@ -446,7 +446,7 @@ mon_new (gsize id) new_->data = NULL; #ifndef DISABLE_PERFCOUNTERS - mono_perfcounters->gc_sync_blocks++; + InterlockedIncrement (&mono_perfcounters->gc_sync_blocks); #endif return new_; } @@ -793,7 +793,7 @@ retry: /* The object must be locked by someone else... */ #ifndef DISABLE_PERFCOUNTERS - mono_perfcounters->thread_contentions++; + InterlockedIncrement (&mono_perfcounters->thread_contentions); #endif /* If ms is 0 we don't block, but just fail straight away */ @@ -802,7 +802,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: @@ -825,7 +825,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; } } @@ -833,7 +833,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; } @@ -875,8 +875,8 @@ retry_contended: waitms = ms; #ifndef DISABLE_PERFCOUNTERS - mono_perfcounters->thread_queue_len++; - mono_perfcounters->thread_queue_max++; + InterlockedIncrement (&mono_perfcounters->thread_queue_len); + InterlockedIncrement (&mono_perfcounters->thread_queue_max); #endif thread = mono_thread_internal_current (); @@ -910,7 +910,7 @@ retry_contended: done_waiting: #ifndef DISABLE_PERFCOUNTERS - mono_perfcounters->thread_queue_len--; + InterlockedDecrement (&mono_perfcounters->thread_queue_len); #endif if (wait_ret == MONO_SEM_TIMEDWAIT_RET_ALERTED && !allow_interruption) { @@ -947,7 +947,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)); @@ -1050,6 +1050,9 @@ mono_monitor_enter_internal (MonoObject *obj) return TRUE; } +/** + * mono_monitor_enter: + */ gboolean mono_monitor_enter (MonoObject *obj) { @@ -1068,6 +1071,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) { @@ -1078,6 +1084,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) { @@ -1161,6 +1170,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) { @@ -1376,7 +1388,7 @@ ves_icall_System_Threading_Monitor_Monitor_wait (MonoObject *obj, guint32 ms) */ MONO_ENTER_GC_SAFE; #ifdef HOST_WIN32 - ret = mono_w32handle_convert_wait_ret (WaitForSingleObjectEx (event, ms, TRUE), 1); + ret = mono_w32handle_convert_wait_ret (mono_win32_wait_for_single_object_ex (event, ms, TRUE), 1); #else ret = mono_w32handle_wait_one (event, ms, TRUE); #endif /* HOST_WIN32 */ @@ -1405,7 +1417,7 @@ ves_icall_System_Threading_Monitor_Monitor_wait (MonoObject *obj, guint32 ms) */ MONO_ENTER_GC_SAFE; #ifdef HOST_WIN32 - ret = mono_w32handle_convert_wait_ret (WaitForSingleObjectEx (event, 0, FALSE), 1); + ret = mono_w32handle_convert_wait_ret (mono_win32_wait_for_single_object_ex (event, 0, FALSE), 1); #else ret = mono_w32handle_wait_one (event, 0, FALSE); #endif /* HOST_WIN32 */