diff options
Diffstat (limited to 'linuxthreads/manager.c')
-rw-r--r-- | linuxthreads/manager.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/linuxthreads/manager.c b/linuxthreads/manager.c index 4aa598bb9e..6e585be79c 100644 --- a/linuxthreads/manager.c +++ b/linuxthreads/manager.c @@ -415,6 +415,10 @@ static int pthread_handle_create(pthread_t *thread, const pthread_attr_t *attr, new_thread->p_start_args.start_routine = start_routine; new_thread->p_start_args.arg = arg; new_thread->p_start_args.mask = *mask; + /* Make the new thread ID available already now. If any of the later + functions fail we return an error value and the caller must not use + the stored thread ID. */ + *thread = new_thread_id; /* Raise priority of thread manager if needed */ __pthread_manager_adjust_prio(new_thread->p_priority); /* Do the cloning. We have to use two different functions depending @@ -487,8 +491,6 @@ static int pthread_handle_create(pthread_t *thread, const pthread_attr_t *attr, /* Set pid field of the new thread, in case we get there before the child starts. */ new_thread->p_pid = pid; - /* We're all set */ - *thread = new_thread_id; return 0; } |