#ifndef __MONO_THREADS_API_H__
#define __MONO_THREADS_API_H__
+#include <glib.h>
#include <mono/utils/mono-publib.h>
+
MONO_BEGIN_DECLS
/*
This API is experimental. It will eventually be required to properly use the rest of the raw-omp embedding API.
*/
-/* Don't use those directly, use the MONO_(BEGIN|END)_EFRAME */
MONO_API gpointer
mono_threads_enter_gc_unsafe_region (gpointer* stackdata);
MONO_API void
mono_threads_exit_gc_unsafe_region (gpointer cookie, gpointer* stackdata);
+MONO_API gpointer
+mono_threads_enter_gc_unsafe_region_unbalanced (gpointer* stackdata);
+
+MONO_API void
+mono_threads_exit_gc_unsafe_region_unbalanced (gpointer cookie, gpointer* stackdata);
+
MONO_API void
mono_threads_assert_gc_unsafe_region (void);
+
+
MONO_API gpointer
mono_threads_enter_gc_safe_region (gpointer *stackdata);
MONO_API void
mono_threads_exit_gc_safe_region (gpointer cookie, gpointer *stackdata);
+MONO_API gpointer
+mono_threads_enter_gc_safe_region_unbalanced (gpointer *stackdata);
+
+MONO_API void
+mono_threads_exit_gc_safe_region_unbalanced (gpointer cookie, gpointer *stackdata);
+
MONO_API void
mono_threads_assert_gc_safe_region (void);
#define MONO_ENTER_GC_UNSAFE \
do { \
gpointer __gc_unsafe_dummy; \
- gpointer __gc_unsafe_cookie = mono_threads_enter_gc_unsafe_region (&__gc_unsafe_dummy) \
+ gpointer __gc_unsafe_cookie = mono_threads_enter_gc_unsafe_region (&__gc_unsafe_dummy)
#define MONO_EXIT_GC_UNSAFE \
mono_threads_exit_gc_unsafe_region (__gc_unsafe_cookie, &__gc_unsafe_dummy); \
} while (0)
+#define MONO_ENTER_GC_UNSAFE_UNBALANCED \
+ do { \
+ gpointer __gc_unsafe_unbalanced_dummy; \
+ gpointer __gc_unsafe_unbalanced_cookie = mono_threads_enter_gc_unsafe_region_unbalanced (&__gc_unsafe_unbalanced_dummy)
+
+#define MONO_EXIT_GC_UNSAFE_UNBALANCED \
+ mono_threads_exit_gc_unsafe_region_unbalanced (__gc_unsafe_unbalanced_cookie, &__gc_unsafe_unbalanced_dummy); \
+ } while (0)
+
#define MONO_ENTER_GC_SAFE \
do { \
gpointer __gc_safe_dummy; \
- gpointer __gc_safe_cookie = mono_threads_enter_gc_safe_region (&__gc_safe_dummy) \
+ gpointer __gc_safe_cookie = mono_threads_enter_gc_safe_region (&__gc_safe_dummy)
#define MONO_EXIT_GC_SAFE \
mono_threads_exit_gc_safe_region (__gc_safe_cookie, &__gc_safe_dummy); \
} while (0)
+#define MONO_ENTER_GC_SAFE_UNBALANCED \
+ do { \
+ gpointer __gc_safe_unbalanced_dummy; \
+ gpointer __gc_safe_unbalanced_cookie = mono_threads_enter_gc_safe_region_unbalanced (&__gc_safe_unbalanced_dummy)
+
+#define MONO_EXIT_GC_SAFE_UNBALANCED \
+ mono_threads_exit_gc_safe_region_unbalanced (__gc_safe_unbalanced_cookie, &__gc_safe_unbalanced_dummy); \
+ } while (0)
+
MONO_END_DECLS
#endif /* __MONO_LOGGER_H__ */