about summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-05-16 22:09:32 +0000
committerUlrich Drepper <drepper@redhat.com>2003-05-16 22:09:32 +0000
commit7ac5b8e2fae145766821d141cf892bbfa50d6618 (patch)
treeb72d74efac9467f44f10503be7abd9531bb4f370
parentbc58c14e334a40141d84b7951c5875cef96b1a2b (diff)
downloadglibc-7ac5b8e2fae145766821d141cf892bbfa50d6618.tar.gz
glibc-7ac5b8e2fae145766821d141cf892bbfa50d6618.tar.xz
glibc-7ac5b8e2fae145766821d141cf892bbfa50d6618.zip
Update.
	* pthread_join.c (pthread_join): Set tid field of the joined
	thread to -1.  This isn't necessary but helps to recognize some
	error conditions with almost no cost.

	* allocatestack.c (FREE_P): Also negative values indicate an
	unused stack.
-rw-r--r--nptl/ChangeLog7
-rw-r--r--nptl/allocatestack.c2
-rw-r--r--nptl/pthread_join.c3
3 files changed, 11 insertions, 1 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index e63c71c841..60b03f764d 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,5 +1,12 @@
 2003-05-16  Ulrich Drepper  <drepper@redhat.com>
 
+	* pthread_join.c (pthread_join): Set tid field of the joined
+	thread to -1.  This isn't necessary but helps to recognize some
+	error conditions with almost no cost.
+
+	* allocatestack.c (FREE_P): Also negative values indicate an
+	unused stack.
+
 	* unwind.c: Include <unistd.h>.
 
 2003-05-14  Ulrich Drepper  <drepper@redhat.com>
diff --git a/nptl/allocatestack.c b/nptl/allocatestack.c
index 95ee992a18..9653b62cab 100644
--- a/nptl/allocatestack.c
+++ b/nptl/allocatestack.c
@@ -111,7 +111,7 @@ static unsigned int nptl_ncreated;
 
 
 /* Check whether the stack is still used or not.  */
-#define FREE_P(descr) ((descr)->tid == 0)
+#define FREE_P(descr) ((descr)->tid <= 0)
 
 
 /* We create a double linked list of all cache entries.  Double linked
diff --git a/nptl/pthread_join.c b/nptl/pthread_join.c
index f77c2c9f98..f94128dd96 100644
--- a/nptl/pthread_join.c
+++ b/nptl/pthread_join.c
@@ -93,6 +93,9 @@ pthread_join (threadid, thread_return)
   pthread_cleanup_pop (0);
 
 
+  /* We mark the thread as terminated and as joined.  */
+  pd->tid = -1;
+
   /* Store the return value if the caller is interested.  */
   if (thread_return != NULL)
     *thread_return = pd->result;