Index: runtime/vm/thread.h |
=================================================================== |
--- runtime/vm/thread.h (revision 45810) |
+++ runtime/vm/thread.h (working copy) |
@@ -17,12 +17,8 @@ |
// A VM thread; may be executing Dart code or performing helper tasks like |
// garbage collection or compilation. The Thread structure associated with |
// a thread is allocated when the thread enters an isolate, and destroyed |
-// upon an explicit call to CleanUp. |
-// |
-// NOTE: When the underlying OS thread is started by the embedder, i.e., not |
-// part of a ThreadPool managed by the VM, we currently leak the Thread |
-// structure after its last isolate exit. We could add an explicit cleanup API, |
-// or, on platforms that support it, register a cleanup callback. |
+// when the underlying OS thread exits. NOTE: On Windows, Thread::CleanUp |
+// must currently be called manually (issue 23474). |
class Thread { |
public: |
// The currently executing thread, or NULL if not yet initialized. |
@@ -30,7 +26,7 @@ |
return reinterpret_cast<Thread*>(OSThread::GetThreadLocal(thread_key_)); |
} |
- // Makes the current thread enter 'isolate'. Also calls EnsureInit. |
+ // Makes the current thread enter 'isolate'. |
static void EnterIsolate(Isolate* isolate); |
// Makes the current thread exit its isolate. |
static void ExitIsolate(); |
@@ -42,10 +38,10 @@ |
static void EnterIsolateAsHelper(Isolate* isolate); |
static void ExitIsolateAsHelper(); |
- // Initializes the current thread as a VM thread, if not already done. |
- static void EnsureInit(); |
- // Clears the state of the current thread. |
+#if defined(TARGET_OS_WINDOWS) |
+ // Clears the state of the current thread and frees the allocation. |
static void CleanUp(); |
+#endif |
// Called at VM startup. |
static void InitOnce(); |
@@ -64,6 +60,9 @@ |
void set_cha(CHA* value); |
private: |
+ // Initializes the current thread as a VM thread, if not already done. |
+ static void EnsureInit(); |
+ |
static ThreadLocalKey thread_key_; |
Isolate* isolate_; |