This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.

Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

[PATCH] __pthread_initializer_manager locking issue


Hi!

Without this, I get a SEGFAULT when trying to debug some threaded programs.
Basically, what happens is that __pthread_unlock is called on an unlocked
lock (__status = 0, __lock = 0). Is __pthread_unlock allowed to segfault on
such a spinlock btw? But this lead me to read the code and I think we must
lock __pthread_manager_thread.p_lock before calling clone, otherwise it does
not make any sense why the special __pthread_manager_event etc., because
that routine on an unlocked p_lock will just call __pthread_manager
immediately.

2000-07-17  Jakub Jelinek  <jakub@redhat.com>

	* pthread.c (__pthread_initialize_manager): Lock
	__pthread_manager_thread.p_lock before calling clone.

--- libc/linuxthreads/pthread.c.jj	Wed Jul 12 16:05:35 2000
+++ libc/linuxthreads/pthread.c	Mon Jul 17 14:06:45 2000
@@ -444,6 +444,7 @@ int __pthread_initialize_manager(void)
 		   | __pthread_initial_thread.p_eventbuf.eventmask.event_bits[idx]))
 	  != 0)
 	{
+	  __pthread_lock(__pthread_manager_thread.p_lock, NULL);
 	  pid = __clone(__pthread_manager_event,
 			(void **) __pthread_manager_thread_tos,
 			CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND,
@@ -465,9 +466,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);
 	}
     }
 

	Jakub

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]