about summary refs log tree commit diff
path: root/linuxthreads
diff options
context:
space:
mode:
Diffstat (limited to 'linuxthreads')
-rw-r--r--linuxthreads/ChangeLog5
-rw-r--r--linuxthreads/pthread.c8
2 files changed, 10 insertions, 3 deletions
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog
index 10abc40329..5d06c1c572 100644
--- a/linuxthreads/ChangeLog
+++ b/linuxthreads/ChangeLog
@@ -1,3 +1,8 @@
+2000-07-18  Jakub Jelinek  <jakub@redhat.com>
+
+	* pthread.c (__pthread_initialize_manager): Lock
+	__pthread_manager_thread.p_lock before calling clone.
+
 2000-05-05  H.J. Lu  <hjl@gnu.org>
 
 	* sysdeps/ia64/pt-machine.h (__compare_and_swap): Change it to
diff --git a/linuxthreads/pthread.c b/linuxthreads/pthread.c
index d70e3f4b1f..c264da53ab 100644
--- a/linuxthreads/pthread.c
+++ b/linuxthreads/pthread.c
@@ -450,6 +450,8 @@ int __pthread_initialize_manager(void)
 		   | __pthread_initial_thread.p_eventbuf.eventmask.event_bits[idx]))
 	  != 0)
 	{
+	  __pthread_lock(__pthread_manager_thread.p_lock, NULL);
+
 #ifdef NEED_SEPARATE_REGISTER_STACK
 	  pid = __clone2(__pthread_manager_event,
 			 (void **) __pthread_manager_thread_bos,
@@ -478,10 +480,10 @@ int __pthread_initialize_manager(void)
 
 	      /* Now call the function which signals the event.  */
 	      __linuxthreads_create_event ();
-
-	      /* Now restart the thread.  */
-	      __pthread_unlock(__pthread_manager_thread.p_lock);
 	    }
+
+	  /* Now restart the thread.  */
+	  __pthread_unlock(__pthread_manager_thread.p_lock);
 	}
     }