From cff695fb4c59ce0cb7bb1724e3c6eafa5906957d Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Thu, 22 Dec 2005 01:46:09 +0000 Subject: Jie Zhang writes: I think the loop was written for MMU case. When there is MMU, mmap () is used to allocate the stack. If one segment is already mapped, we should continue to see if we can use the next one. However, for NOMMU, malloc () is used. It's waste of CPU cycles to continue to try if it fails. Here is a new patch, which makes this change only for NOMMU. --- libpthread/linuxthreads.old/manager.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'libpthread') diff --git a/libpthread/linuxthreads.old/manager.c b/libpthread/linuxthreads.old/manager.c index 204344aef..7ad5ab525 100644 --- a/libpthread/linuxthreads.old/manager.c +++ b/libpthread/linuxthreads.old/manager.c @@ -498,6 +498,14 @@ static int pthread_handle_create(pthread_t *thread, const pthread_attr_t *attr, &new_thread, &new_thread_bottom, &guardaddr, &guardsize) == 0) break; +#ifndef __ARCH_HAS_MMU__ + else + /* When there is MMU, mmap () is used to allocate the stack. If one + * segment is already mapped, we should continue to see if we can + * use the next one. However, when there is no MMU, malloc () is used. + * It's waste of CPU cycles to continue to try if it fails. */ + return EAGAIN; +#endif } __pthread_handles_num++; /* Allocate new thread identifier */ -- cgit v1.2.3