| Index: runtime/vm/os_thread_android.cc | 
| diff --git a/runtime/vm/os_thread_android.cc b/runtime/vm/os_thread_android.cc | 
| index 377fd94807cc443b79c7fdf0fd8cc2bdcfc7b1bd..1f8de35eddac8e76db5ba4e95b7e106a20e3c4a7 100644 | 
| --- a/runtime/vm/os_thread_android.cc | 
| +++ b/runtime/vm/os_thread_android.cc | 
| @@ -101,9 +101,6 @@ int OSThread::Start(ThreadStartFunction function, uword parameter) { | 
| int result = pthread_attr_init(&attr); | 
| RETURN_ON_PTHREAD_FAILURE(result); | 
|  | 
| -  result = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); | 
| -  RETURN_ON_PTHREAD_FAILURE(result); | 
| - | 
| result = pthread_attr_setstacksize(&attr, OSThread::GetMaxStackSize()); | 
| RETURN_ON_PTHREAD_FAILURE(result); | 
|  | 
| @@ -123,6 +120,7 @@ int OSThread::Start(ThreadStartFunction function, uword parameter) { | 
| ThreadLocalKey OSThread::kUnsetThreadLocalKey = | 
| static_cast<pthread_key_t>(-1); | 
| ThreadId OSThread::kInvalidThreadId = static_cast<ThreadId>(0); | 
| +ThreadJoinId OSThread::kInvalidThreadJoinId = static_cast<ThreadJoinId>(0); | 
|  | 
| ThreadLocalKey OSThread::CreateThreadLocal(ThreadDestructor destructor) { | 
| pthread_key_t key = kUnsetThreadLocalKey; | 
| @@ -158,8 +156,13 @@ ThreadId OSThread::GetCurrentThreadId() { | 
| } | 
|  | 
|  | 
| -bool OSThread::Join(ThreadId id) { | 
| -  return false; | 
| +ThreadJoinId OSThread::GetCurrentThreadJoinId() { | 
| +  return pthread_self(); | 
| +} | 
| + | 
| + | 
| +void OSThread::Join(ThreadJoinId id) { | 
| +  ASSERT(pthread_join(id, NULL) == 0); | 
| } | 
|  | 
|  | 
|  |