OSDN Git Service

Fix in error handling in pthread_create.cpp.
authorYabin Cui <yabinc@google.com>
Wed, 25 Mar 2015 23:18:21 +0000 (16:18 -0700)
committerYabin Cui <yabinc@google.com>
Wed, 25 Mar 2015 23:18:21 +0000 (16:18 -0700)
It is due to a previous change "Let g_thread_list_lock only protect g_thread_list".
We need to add the newly created thread to thread_list even if
__init_thread fails, so the thread can exit successfully.

Change-Id: I0332df11acfdd181350bcc092b12d90d679057a4

libc/bionic/pthread_create.cpp

index 3d73d52..66632c4 100644 (file)
@@ -267,6 +267,7 @@ int pthread_create(pthread_t* thread_out, pthread_attr_t const* attr,
     // Mark the thread detached and replace its start_routine with a no-op.
     // Letting the thread run is the easiest way to clean up its resources.
     atomic_store(&thread->join_state, THREAD_DETACHED);
+    __pthread_internal_add(thread);
     thread->start_routine = __do_nothing;
     pthread_mutex_unlock(&thread->startup_handshake_mutex);
     return init_errno;