Merge pull request #5714 from alexischr/update_bockbuild
[mono.git] / mono / metadata / lock-tracer.h
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__ */