about summary refs log tree commit diff
path: root/linuxthreads/pthread.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2001-11-28 22:27:20 +0000
committerUlrich Drepper <drepper@redhat.com>2001-11-28 22:27:20 +0000
commitcf6a2367e82ba5b322baf0fc0caa5d57e799c72d (patch)
tree6231ff95b897d8af2428dbe041a30ad022acd35a /linuxthreads/pthread.c
parent4e735c9aaf9e05a1d4f587f5b049b2f515ff755a (diff)
downloadglibc-cf6a2367e82ba5b322baf0fc0caa5d57e799c72d.tar.gz
glibc-cf6a2367e82ba5b322baf0fc0caa5d57e799c72d.tar.xz
glibc-cf6a2367e82ba5b322baf0fc0caa5d57e799c72d.zip
Update.
2001-11-22  Wolfram Gloger  <wg@malloc.de>

	* pthread.c (pthread_onexit_process): Don't call free
	after threads have been asynchronously terminated.

	* manager.c (pthread_handle_exit): Surround cancellation
	of threads with __flockfilelist()/__funlockfilelist().
Diffstat (limited to 'linuxthreads/pthread.c')
-rw-r--r--linuxthreads/pthread.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/linuxthreads/pthread.c b/linuxthreads/pthread.c
index b287dc8d03..81261416e2 100644
--- a/linuxthreads/pthread.c
+++ b/linuxthreads/pthread.c
@@ -795,7 +795,9 @@ static void pthread_onexit_process(int retcode, void *arg)
     if (self == __pthread_main_thread)
       {
 	waitpid(__pthread_manager_thread.p_pid, NULL, __WCLONE);
-	free (__pthread_manager_thread_bos);
+	/* Since all threads have been asynchronously terminated
+           (possibly holding locks), free cannot be used any more.  */
+	/*free (__pthread_manager_thread_bos);*/
 	__pthread_manager_thread_bos = __pthread_manager_thread_tos = NULL;
       }
   }