Merge "Don't attach attached threads." into dalvik-dev
diff --git a/src/thread.cc b/src/thread.cc
index af48c35..538aaa8 100644
--- a/src/thread.cc
+++ b/src/thread.cc
@@ -263,19 +263,21 @@
 }
 
 Thread* Thread::Attach(const Runtime* runtime, const char* name, bool as_daemon) {
-  Thread* self = new Thread;
-  self->Attach(runtime);
+  Thread* self = Thread::Current();
+  if (self == NULL) {
+    self = new Thread;
+    self->Attach(runtime);
 
-  self->SetState(Thread::kNative);
+    self->SetState(Thread::kNative);
 
-  // If we're the main thread, ClassLinker won't be created until after we're attached,
-  // so that thread needs a two-stage attach. Regular threads don't need this hack.
-  if (self->thin_lock_id_ != ThreadList::kMainId) {
-    self->CreatePeer(name, as_daemon);
+    // If we're the main thread, ClassLinker won't be created until after we're attached,
+    // so that thread needs a two-stage attach. Regular threads don't need this hack.
+    if (self->thin_lock_id_ != ThreadList::kMainId) {
+      self->CreatePeer(name, as_daemon);
+    }
+
+    self->GetJniEnv()->locals.AssertEmpty();
   }
-
-  self->GetJniEnv()->locals.AssertEmpty();
-
   return self;
 }