summaryrefslogtreecommitdiff
path: root/linuxthreads
diff options
context:
space:
mode:
Diffstat (limited to 'linuxthreads')
-rw-r--r--linuxthreads/ChangeLog5
-rw-r--r--linuxthreads/manager.c6
2 files changed, 9 insertions, 2 deletions
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog
index 6d28f909c0..2a9683ec34 100644
--- a/linuxthreads/ChangeLog
+++ b/linuxthreads/ChangeLog
@@ -1,3 +1,8 @@
+2000-03-23 Ulrich Drepper <drepper@redhat.com>
+
+ * manager.c (pthread_handle_create): Store ID of new thread before
+ clone call.
+
2000-03-21 Ulrich Drepper <drepper@redhat.com>
* attr.c: Use new macros from shlib-compat.h to define versions.
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;
}