#region Sync with metadata/object-internals.h
int lock_thread_id;
// stores a thread handle
- internal IntPtr system_thread_handle;
-
- /* Note this is an opaque object (an array), not a CultureInfo */
- private object cached_culture_info;
+ IntPtr handle;
+ IntPtr native_handle; // used only on Win32
+ IntPtr unused3;
/* accessed only from unmanaged code */
private IntPtr name;
private int name_len;
private int abort_state_handle;
/* thread_id is only accessed from unmanaged code */
internal Int64 thread_id;
-
- /* start_notify is used by the runtime to signal that Start()
- * is ok to return
- */
- private IntPtr stack_ptr;
+ private IntPtr debugger_thread; // FIXME switch to bool as soon as CI testing with corlib version bump works
private UIntPtr static_data; /* GC-tracked */
private IntPtr runtime_thread_info;
/* current System.Runtime.Remoting.Contexts.Context instance
private IntPtr abort_protected_block_count;
private int priority = (int) ThreadPriority.Normal;
private IntPtr owned_mutex;
+ private IntPtr suspended_event;
+ private int self_suspended;
/*
* These fields are used to avoid having to increment corlib versions
* when a new field is added to the unmanaged MonoThread structure.
// Closes the system thread handle
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern void Thread_free_internal(IntPtr handle);
+ private extern void Thread_free_internal();
[ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
~InternalThread() {
- Thread_free_internal(system_thread_handle);
+ Thread_free_internal();
}
}
}
}
- // Looks up the object associated with the current thread
- // this is called by the JIT directly, too
[MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern static InternalThread CurrentInternalThread_internal();
+ private extern static Thread GetCurrentThread ();
public static Thread CurrentThread {
[ReliabilityContract (Consistency.WillNotCorruptState, Cer.MayFail)]
get {
- if (current_thread == null)
- current_thread = new Thread (CurrentInternalThread_internal ());
- return current_thread;
+ Thread current = current_thread;
+ if (current != null)
+ return current;
+ // This will set the current_thread tls variable
+ return GetCurrentThread ();
}
}