#include <mono/utils/mono-stack-unwinding.h>
#include <mono/utils/mono-linked-list-set.h>
#include <mono/utils/mono-tls.h>
-#include <mono/utils/mono-threads-coop.h>
-#include <mono/utils/mono-threads-api.h>
#include <mono/utils/mono-coop-semaphore.h>
#include <mono/io-layer/io-layer.h>
MonoThreadInfoInterruptToken *interrupt_token;
- /* MonoHandleArena for coop handles */
- gpointer handle_arena;
+ /* HandleStack for coop handles */
+ gpointer handle_stack;
+
+ /* Stack mark for targets that explicitly require one */
+ gpointer stack_mark;
} MonoThreadInfo;
typedef struct {
gboolean
mono_thread_info_resume (MonoNativeThreadId tid);
-MONO_API void
-mono_thread_info_set_name (MonoNativeThreadId tid, const char *name);
-
void
mono_thread_info_safe_suspend_and_run (MonoNativeThreadId id, gboolean interrupt_kernel, MonoSuspendThreadCallback callback, gpointer user_data);
void mono_threads_core_unregister (THREAD_INFO_TYPE *info);
HANDLE mono_threads_core_open_handle (void);
HANDLE mono_threads_core_open_thread_handle (HANDLE handle, MonoNativeThreadId tid);
-void mono_threads_core_set_name (MonoNativeThreadId tid, const char *name);
void mono_threads_coop_begin_global_suspend (void);
void mono_threads_coop_end_global_suspend (void);
gboolean
mono_native_thread_create (MonoNativeThreadId *tid, gpointer func, gpointer arg);
+MONO_API void
+mono_native_thread_set_name (MonoNativeThreadId tid, const char *name);
+
/*Mach specific internals */
void mono_threads_init_dead_letter (void);
void mono_threads_install_dead_letter (void);
} MonoDoBlockingResult;
typedef enum {
- DoneBlockingAborted, //blocking was aborted and not properly restored, poll the state
DoneBlockingOk, //exited blocking fine
DoneBlockingWait, //thread should end suspended
} MonoDoneBlockingResult;
typedef enum {
AbortBlockingIgnore, //Ignore
- AbortBlockingIgnoreAndPoll, //Ignore and pool
+ AbortBlockingIgnoreAndPoll, //Ignore and poll
AbortBlockingOk, //Abort worked
- AbortBlockingOkAndPool, //Abort worked, but pool before
+ AbortBlockingWait, //Abort worked, but should wait for resume
} MonoAbortBlockingResult;
MonoThreadUnwindState* mono_thread_info_get_suspend_state (THREAD_INFO_TYPE *info);
gpointer
-mono_threads_cookie_for_reset_blocking_start (THREAD_INFO_TYPE *info, int reset_blocking_count);
+mono_threads_enter_gc_unsafe_region_cookie (void);
void mono_thread_info_wait_for_resume (THREAD_INFO_TYPE *info);
void mono_threads_begin_global_suspend (void);
void mono_threads_end_global_suspend (void);
+gboolean
+mono_thread_info_is_current (THREAD_INFO_TYPE *info);
+
#endif /* __MONO_THREADS_H__ */