| Index: runtime/vm/os_thread_macos.cc
 | 
| diff --git a/runtime/vm/os_thread_macos.cc b/runtime/vm/os_thread_macos.cc
 | 
| index bcac82829670b1f7970c1c8cfc92941a1955a131..ffb94e99fe559cf5a1ebecdc9e31ac7803f117f0 100644
 | 
| --- a/runtime/vm/os_thread_macos.cc
 | 
| +++ b/runtime/vm/os_thread_macos.cc
 | 
| @@ -94,9 +94,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);
 | 
|  
 | 
| @@ -116,6 +113,8 @@ int OSThread::Start(ThreadStartFunction function, uword parameter) {
 | 
|  ThreadLocalKey OSThread::kUnsetThreadLocalKey =
 | 
|      static_cast<pthread_key_t>(-1);
 | 
|  ThreadId OSThread::kInvalidThreadId = reinterpret_cast<ThreadId>(NULL);
 | 
| +ThreadJoinId OSThread::kInvalidThreadJoinId =
 | 
| +    reinterpret_cast<ThreadJoinId>(NULL);
 | 
|  
 | 
|  ThreadLocalKey OSThread::CreateThreadLocal(ThreadDestructor destructor) {
 | 
|    pthread_key_t key = kUnsetThreadLocalKey;
 | 
| @@ -151,8 +150,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);
 | 
|  }
 | 
|  
 | 
|  
 | 
| 
 |