about summary refs log tree commit diff
path: root/nptl/allocatestack.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-07-08 03:40:49 +0000
committerUlrich Drepper <drepper@redhat.com>2003-07-08 03:40:49 +0000
commitdb54f488ee24b14027c485e0005950dfdd5ef885 (patch)
tree2a07a1746c1ffa758a34484f65263c737818d162 /nptl/allocatestack.c
parent5fee5ad11c5307141f76aa7ea28ec1e1b6418fea (diff)
downloadglibc-db54f488ee24b14027c485e0005950dfdd5ef885.tar.gz
glibc-db54f488ee24b14027c485e0005950dfdd5ef885.tar.xz
glibc-db54f488ee24b14027c485e0005950dfdd5ef885.zip
Update.
2003-07-07  Ulrich Drepper  <drepper@redhat.com>

	* descr.h (struct pthread): Add pid field.
	* allocatestack.c (allocate_stack): Initialize pid field in descriptor.
	(__reclaim_stacks): Likewise.
	* init.c (sigcancel_handler): If __ASSUME_CORRECT_SI_PID is defined
	also check for PID of the signal source.
	(__pthread_initialize_minimal_internal): Also initialize pid field
	of initial thread's descriptor.
	* pthread_cancel.c: Use tgkill instead of tkill if possible.
	* sysdeps/unix/sysv/linux/fork.c: Likewise.
	* sysdeps/unix/sysv/linux/pt-raise.c: Likewise.
	* sysdeps/unix/sysv/linux/pthread_kill.c: Likewise.
	* sysdeps/unix/sysv/linux/raise.c: Likewise.
Diffstat (limited to 'nptl/allocatestack.c')
-rw-r--r--nptl/allocatestack.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/nptl/allocatestack.c b/nptl/allocatestack.c
index 223f0e445d..e042cf4840 100644
--- a/nptl/allocatestack.c
+++ b/nptl/allocatestack.c
@@ -332,6 +332,9 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp,
       pd->header.sysinfo = THREAD_GETMEM (THREAD_SELF, header.sysinfo);
 #endif
 
+      /* The process ID is also the same as that of the caller.  */
+      pd->pid = THREAD_GETMEM (THREAD_SELF, pid);
+
       /* Allocate the DTV for this thread.  */
       if (_dl_allocate_tls (TLS_TPADJ (pd)) == NULL)
 	/* Something went wrong.  */
@@ -464,6 +467,9 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp,
 	  pd->header.sysinfo = THREAD_GETMEM (THREAD_SELF, header.sysinfo);
 #endif
 
+	  /* The process ID is also the same as that of the caller.  */
+	  pd->pid = THREAD_GETMEM (THREAD_SELF, pid);
+
 	  /* Allocate the DTV for this thread.  */
 	  if (_dl_allocate_tls (TLS_TPADJ (pd)) == NULL)
 	    {
@@ -626,6 +632,9 @@ __reclaim_stacks (void)
 	  /* This marks the stack as free.  */
 	  curp->tid = 0;
 
+	  /* The PID field must be initialized for the new process.  */
+	  curp->pid = self->pid;
+
 	  /* Account for the size of the stack.  */
 	  stack_cache_actsize += curp->stackblock_size;
 	}