1 /** 2 * \file 3 */ 4 5 #ifndef __MONO_METADATA_LOCK_TRACER_H__ 6 #define __MONO_METADATA_LOCK_TRACER_H__ 7 8 /*This is a private header*/ 9 #include <glib.h> 10 11 #include "mono/utils/mono-os-mutex.h" 12 #include "mono/utils/mono-coop-mutex.h" 13 14 G_BEGIN_DECLS 15 16 typedef enum { 17 InvalidLock = 0, 18 LoaderLock, 19 ImageDataLock, 20 DomainLock, 21 DomainAssembliesLock, 22 DomainJitCodeHashLock, 23 IcallLock, 24 AssemblyBindingLock, 25 MarshalLock, 26 ClassesLock, 27 LoaderGlobalDataLock, 28 ThreadsLock, 29 } RuntimeLocks; 30 31 #ifdef LOCK_TRACER 32 33 void mono_locks_tracer_init (void); 34 35 void mono_locks_lock_acquired (RuntimeLocks kind, gpointer lock); 36 void mono_locks_lock_released (RuntimeLocks kind, gpointer lock); 37 38 #else 39 40 #define mono_locks_tracer_init() do {} while (0) 41 42 #define mono_locks_lock_acquired(__UNUSED0, __UNUSED1) do {} while (0) 43 #define mono_locks_lock_released(__UNUSED0, __UNUSED1) do {} while (0) 44 45 #endif 46 47 #define mono_locks_os_acquire(LOCK,NAME) \ 48 do { \ 49 mono_os_mutex_lock (LOCK); \ 50 mono_locks_lock_acquired (NAME, LOCK); \ 51 } while (0) 52 53 #define mono_locks_os_release(LOCK,NAME) \ 54 do { \ 55 mono_locks_lock_released (NAME, LOCK); \ 56 mono_os_mutex_unlock (LOCK); \ 57 } while (0) 58 59 #define mono_locks_coop_acquire(LOCK,NAME) \ 60 do { \ 61 mono_coop_mutex_lock (LOCK); \ 62 mono_locks_lock_acquired (NAME, LOCK); \ 63 } while (0) 64 65 #define mono_locks_coop_release(LOCK,NAME) \ 66 do { \ 67 mono_locks_lock_released (NAME, LOCK); \ 68 mono_coop_mutex_unlock (LOCK); \ 69 } while (0) 70 71 G_END_DECLS 72 73 #endif /* __MONO_METADATA_LOCK_TRACER_H__ */ 74