+ MonoNativeThreadHandle native_handle; /* Valid on mach and android */
+ int thread_state;
+
+ /*Tells if this thread was created by the runtime or not.*/
+ gboolean runtime_thread;
+
+ /* suspend machinery, fields protected by suspend_semaphore */
+ MonoSemType suspend_semaphore;
+ int suspend_count;
+
+ MonoSemType finish_resume_semaphore;
+ MonoSemType resume_semaphore;
+
+ /* only needed by the posix backend */
+#if (defined(_POSIX_VERSION) || defined(__native_client__)) && !defined (__MACH__)
+ MonoSemType begin_suspend_semaphore;
+ gboolean syscall_break_signal;
+ gboolean suspend_can_continue;
+#endif
+
+ /*In theory, only the posix backend needs this, but having it on mach/win32 simplifies things a lot.*/
+ MonoThreadUnwindState suspend_state;
+
+ /*async call machinery, thread MUST be suspended before accessing those fields*/
+ void (*async_target)(void*);
+ void *user_data;
+
+ /*
+ If true, this thread is running a critical region of code and cannot be suspended.
+ A critical session is implicitly started when you call mono_thread_info_safe_suspend_sync
+ and is ended when you call either mono_thread_info_resume or mono_thread_info_finish_suspend.
+ */
+ gboolean inside_critical_region;