Merge "Return EINVAL when calling pthread_detach for joined thread."
This commit is contained in:
commit
4149dc944b
@ -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();
|
||||||
|
Loading…
Reference in New Issue
Block a user