X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Flock-tracer.c;h=8ca4a27ab8211ed592ba4f0cbbe4d7f78d4ad91f;hb=22577feecfa38fc15a01887f27aa5687b0c5504c;hp=959dd36aa3c282a90216973f6402dac5990bb871;hpb=6b32f6951a488360b9782e6b7c7932a8901be749;p=mono.git diff --git a/mono/metadata/lock-tracer.c b/mono/metadata/lock-tracer.c index 959dd36aa3c..8ca4a27ab82 100644 --- a/mono/metadata/lock-tracer.c +++ b/mono/metadata/lock-tracer.c @@ -21,18 +21,20 @@ #endif #include +#include #include "lock-tracer.h" - /* * This is a very simple lock trace implementation. It can be used to verify that the runtime is * correctly following all locking rules. * * To log more kind of locks just do the following: * - add an entry into the RuntimeLocks enum - * - change mono_mutex_lock(mutex) to mono_locks_acquire (mutex, LockName) - * - change mono_mutex_unlock to mono_locks_release (mutex, LockName) + * - change mono_os_mutex_lock(mutex) to mono_locks_os_acquire (mutex, LockName) + * - change mono_os_mutex_unlock(mutex) to mono_locks_os_release (mutex, LockName) + * - change mono_coop_mutex_lock(mutex) to mono_locks_coop_acquire (mutex, LockName) + * - change mono_coop_mutex_unlock(mutex) to mono_locks_coop_release (mutex, LockName) * - change the decoder to understand the new lock kind. * * TODO: @@ -71,7 +73,7 @@ mono_locks_tracer_init (void) Dl_info info; int res; char *name; - mono_mutex_init_recursive (&tracer_lock); + mono_os_mutex_init_recursive (&tracer_lock); if (!g_getenv ("MONO_ENABLE_LOCK_TRACER")) return; name = g_strdup_printf ("locks.%d", getpid ()); @@ -109,18 +111,20 @@ static void add_record (RecordType record_kind, RuntimeLocks kind, gpointer lock) { int i = 0; - gpointer frames[10]; + const int no_frames = 6; + gpointer frames[no_frames]; + char *msg; if (!trace_file) return; - memset (frames, 0, sizeof (gpointer)); - mono_backtrace (frames, 6); - for (i = 0; i < 6; ++i) + memset (frames, 0, sizeof (gpointer) * no_frames); + mono_backtrace (frames, no_frames); + for (i = 0; i < no_frames; ++i) frames [i] = (gpointer)((size_t)frames[i] - base_address); /*We only dump 5 frames, which should be more than enough to most analysis.*/ - msg = g_strdup_printf ("%x,%d,%d,%p,%p,%p,%p,%p,%p\n", (guint32)GetCurrentThreadId (), record_kind, kind, lock, frames [1], frames [2], frames [3], frames [4], frames [5]); + msg = g_strdup_printf ("%x,%d,%d,%p,%p,%p,%p,%p,%p\n", (guint32)mono_native_thread_id_get (), record_kind, kind, lock, frames [1], frames [2], frames [3], frames [4], frames [5]); fwrite (msg, strlen (msg), 1, trace_file); fflush (trace_file); g_free (msg); @@ -137,5 +141,7 @@ mono_locks_lock_released (RuntimeLocks kind, gpointer lock) { add_record (RECORD_LOCK_RELEASED, kind, lock); } +#else -#endif +MONO_EMPTY_SOURCE_FILE (lock_tracer); +#endif /* LOCK_TRACER */