am 4149dc94: Merge "Return EINVAL when calling pthread_detach for joined thread."
				
					
				
			* commit '4149dc944bbe3c5f1c14fc998106975e68bdd6bf': Return EINVAL when calling pthread_detach for joined thread.
This commit is contained in:
		@@ -44,7 +44,7 @@ int pthread_detach(pthread_t t) {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    switch (old_state) {
 | 
					    switch (old_state) {
 | 
				
			||||||
      case THREAD_NOT_JOINED: return 0;
 | 
					      case THREAD_NOT_JOINED: return 0;
 | 
				
			||||||
      case THREAD_JOINED:     return 0;  // Already being joined; silently do nothing, like glibc.
 | 
					      case THREAD_JOINED:     return EINVAL;
 | 
				
			||||||
      case THREAD_DETACHED:   return EINVAL;
 | 
					      case THREAD_DETACHED:   return EINVAL;
 | 
				
			||||||
      case THREAD_EXITED_NOT_JOINED: break;  // Call pthread_join out of scope of pthread_accessor.
 | 
					      case THREAD_EXITED_NOT_JOINED: break;  // Call pthread_join out of scope of pthread_accessor.
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -271,8 +271,11 @@ TEST(pthread, pthread_no_op_detach_after_join) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  sleep(1); // (Give t2 a chance to call pthread_join.)
 | 
					  sleep(1); // (Give t2 a chance to call pthread_join.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // ...a call to pthread_detach on thread 1 will "succeed" (silently fail)...
 | 
					#if defined(__BIONIC__)
 | 
				
			||||||
 | 
					  ASSERT_EQ(EINVAL, pthread_detach(t1));
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
  ASSERT_EQ(0, pthread_detach(t1));
 | 
					  ASSERT_EQ(0, pthread_detach(t1));
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
  AssertDetached(t1, false);
 | 
					  AssertDetached(t1, false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  spinhelper.UnSpin();
 | 
					  spinhelper.UnSpin();
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user