aboutsummaryrefslogtreecommitdiff
path: root/linuxthreads/manager.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2001-01-01 04:49:02 +0000
committerUlrich Drepper <drepper@redhat.com>2001-01-01 04:49:02 +0000
commitaf8240ebcbf1a0ae07bb033b9e3305714ce44e47 (patch)
tree19ed870e439e15f9548760d73abcc6aa4c815e81 /linuxthreads/manager.c
parent1c566118b69258191fbee4280fe12a42883c3267 (diff)
downloadglibc-af8240ebcbf1a0ae07bb033b9e3305714ce44e47.zip
glibc-af8240ebcbf1a0ae07bb033b9e3305714ce44e47.tar.gz
glibc-af8240ebcbf1a0ae07bb033b9e3305714ce44e47.tar.bz2
Update.
2000-12-31 Ulrich Drepper <drepper@redhat.com> * 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.
Diffstat (limited to 'linuxthreads/manager.c')
-rw-r--r--linuxthreads/manager.c16
1 files changed, 4 insertions, 12 deletions
diff --git a/linuxthreads/manager.c b/linuxthreads/manager.c
index 1746bc5..05a0020 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
}
}