summary refs log tree commit diff
path: root/linuxthreads/manager.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-01-12 11:39:14 +0000
committerUlrich Drepper <drepper@redhat.com>2000-01-12 11:39:14 +0000
commitce75c139ac162cf8d7d4a7598503bc3592328b2c (patch)
tree604f258eac5abfa916634aa002e6fd6bcc35fa82 /linuxthreads/manager.c
parent2e8048e533cf8f9ce23400c261cd8528cf37af5e (diff)
downloadglibc-ce75c139ac162cf8d7d4a7598503bc3592328b2c.tar.gz
glibc-ce75c139ac162cf8d7d4a7598503bc3592328b2c.tar.xz
glibc-ce75c139ac162cf8d7d4a7598503bc3592328b2c.zip
Update.
2000-01-12  Ulrich Drepper  <drepper@cygnus.com>

	* iconvdata/gconv-modules: Add aliases ISO-IR-199 and ISO-IR-203.
	Reported by Bruno Haible <haible@ilog.fr>.

2000-01-11  Andreas Schwab  <schwab@suse.de>

	* sysdeps/i386/fpu/libm-test-ulps: Adjust some epsilons.

2000-01-10  Thorsten Kukuk  <kukuk@suse.de>

	* nss/getent.c: Add ipv6 support for hosts.

2000-01-05  Philip Blundell  <pb@futuretv.com>

	* sysdeps/unix/sysv/linux/arm/Versions: Add getrlimit, setrlimit,
	getrlimit64, setrlimit64 for GLIBC_2.1.3.
	* sysdeps/unix/sysv/linux/arm/syscalls.list: Add oldgetrlimit,
	oldsetrlimit.
	* sysdeps/unix/sysv/linux/arm/oldsetrlimit64.c: New file.
	* sysdeps/unix/sysv/linux/arm/oldgetrlimit64.c: Likewise.
	* sysdeps/unix/sysv/linux/arm/setrlimit64.c: Likewise.
	* sysdeps/unix/sysv/linux/arm/getrlimit64.c: Likewise.
	* sysdeps/unix/sysv/linux/arm/setrlimit.c: Likewise.
	* sysdeps/unix/sysv/linux/arm/getrlimit.c: Likewise.

	* sysdeps/unix/sysv/linux/arm/Makefile [subdir=resource]
	(sysdep_routines): Add oldgetrlimit64, oldsetrlimit64.
	[subdir=misc] (sysdep_headers): Add sys/elf.h.

2000-01-09  Andreas Jaeger  <aj@suse.de>

	* manual/install.texi (Tools for Compilation): Update required
	compiler version.
	(Configuring and compiling): Restore old comments about
	configparms; modify to reflect current usage.

2000-01-09  Philip Blundell  <philb@gnu.org>

	* sysdeps/posix/getaddrinfo.c (gaih_inet): Don't attempt name
	resolution if the hints included AI_NUMERICHOST.
Diffstat (limited to 'linuxthreads/manager.c')
-rw-r--r--linuxthreads/manager.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/linuxthreads/manager.c b/linuxthreads/manager.c
index 78d4aaaaca..3a6f085bbf 100644
--- a/linuxthreads/manager.c
+++ b/linuxthreads/manager.c
@@ -497,6 +497,8 @@ static int pthread_handle_create(pthread_t *thread, const pthread_attr_t *attr,
 static void pthread_free(pthread_descr th)
 {
   pthread_handle handle;
+  pthread_readlock_info *iter, *next;
+
   ASSERT(th->p_exited);
   /* Make the handle invalid */
   handle =  thread_handle(th->p_tid);
@@ -509,6 +511,23 @@ static void pthread_free(pthread_descr th)
 #endif
   /* One fewer threads in __pthread_handles */
   __pthread_handles_num--;
+
+  /* Destroy read lock list, and list of free read lock structures. 
+     If the former is not empty, it means the thread exited while
+     holding read locks! */
+
+  for (iter = th->p_readlock_list; iter != NULL; iter = next)
+    {
+      next = iter->pr_next;
+      free(iter);
+    }
+
+  for (iter = th->p_readlock_free; iter != NULL; iter = next)
+    {
+      next = iter->pr_next;
+      free(iter);
+    }
+
   /* If initial thread, nothing to free */
   if (th == &__pthread_initial_thread) return;
   if (!th->p_userstack)