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