about summary refs log tree commit diff
path: root/linuxthreads
diff options
context:
space:
mode:
Diffstat (limited to 'linuxthreads')
-rw-r--r--linuxthreads/ChangeLog6
-rw-r--r--linuxthreads/manager.c16
2 files changed, 8 insertions, 14 deletions
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog
index 7efb334262..79c6786c5f 100644
--- a/linuxthreads/ChangeLog
+++ b/linuxthreads/ChangeLog
@@ -1,6 +1,8 @@
-2000-12-31  H.J. Lu  <hjl@gnu.org>
+2000-12-31  Ulrich Drepper  <drepper@redhat.com>
 
-	* manager.c (pthread_allocate_stack): Fix a typo.
+	* manager.c (pthread_alloca_stack): Remove MAP_FIXED from mmap calls.
+	(pthread_free): Always unmap the stack.  It's safe now that we don't
+	use MAP_FIXED to allocate stacks.
 
 2000-12-31  Ulrich Drepper  <drepper@redhat.com>
 
diff --git a/linuxthreads/manager.c b/linuxthreads/manager.c
index 1746bc5d53..05a0020b63 100644
--- a/linuxthreads/manager.c
+++ b/linuxthreads/manager.c
@@ -376,7 +376,7 @@ static int pthread_allocate_stack(const pthread_attr_t *attr,
       map_addr = (caddr_t)((char *)(new_thread + 1) - stacksize / 2);
       res_addr = mmap(map_addr, stacksize / 2,
 		      PROT_READ | PROT_WRITE | PROT_EXEC,
-		      MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
+		      MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
       if (res_addr != map_addr)
 	{
 	  /* Bad luck, this segment is already mapped. */
@@ -388,7 +388,7 @@ static int pthread_allocate_stack(const pthread_attr_t *attr,
       map_addr = (caddr_t)new_thread_bottom;
       res_addr = mmap(map_addr, stacksize/2,
 		      PROT_READ | PROT_WRITE | PROT_EXEC,
-		      MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
+		      MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
       if (res_addr != map_addr)
 	{
 	  if (res_addr != MAP_FAILED)
@@ -449,7 +449,7 @@ static int pthread_allocate_stack(const pthread_attr_t *attr,
       map_addr = new_thread_bottom - guardsize;
       res_addr = mmap(map_addr, stacksize + guardsize,
 		      PROT_READ | PROT_WRITE | PROT_EXEC,
-		      MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
+		      MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
       if (res_addr != map_addr)
 	{
 	  /* Bad luck, this segment is already mapped. */
@@ -721,16 +721,8 @@ static void pthread_free(pthread_descr th)
       guardaddr -= stacksize;
       stacksize *= 2;
 #endif
-#if FLOATING_STACKS
-      /* Can unmap safely.  */
+      /* Unmap the stack.  */
       munmap(guardaddr, stacksize + guardsize);
-#else
-      /* Only remap to PROT_NONE, so that the region is reserved in
-         case we map the stack again later.  Avoid collision with
-         other mmap()s, in particular by malloc().  */
-      mmap(guardaddr, stacksize + guardsize, PROT_NONE,
-	   MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
-#endif
     }
 }