diff options
Diffstat (limited to 'nptl')
-rw-r--r-- | nptl/ChangeLog | 4 | ||||
-rw-r--r-- | nptl/allocatestack.c | 16 |
2 files changed, 8 insertions, 12 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog index bdf61296e2..b622fe7c0f 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,7 @@ +2011-12-14 Carlos O'Donell <carlos@systemhalted.org> + + * allocatestack.c (allocate_stack): Return errno on failure. + 2011-12-14 Jeff Law <law@redhat.com> [BZ #5245] diff --git a/nptl/allocatestack.c b/nptl/allocatestack.c index 36b4aa16fd..b1b17ceba7 100644 --- a/nptl/allocatestack.c +++ b/nptl/allocatestack.c @@ -435,7 +435,7 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp, { /* Something went wrong. */ assert (errno == ENOMEM); - return EAGAIN; + return errno; } @@ -496,12 +496,7 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp, MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, -1, 0); if (__builtin_expect (mem == MAP_FAILED, 0)) - { - if (errno == ENOMEM) - __set_errno (EAGAIN); - - return errno; - } + return errno; /* SIZE is guaranteed to be greater than zero. So we can never get a null pointer back from mmap. */ @@ -581,7 +576,7 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp, /* Free the stack memory we just allocated. */ (void) munmap (mem, size); - return EAGAIN; + return errno; } @@ -636,10 +631,7 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp, #endif if (mprotect (guard, guardsize, PROT_NONE) != 0) { - int err; mprot_error: - err = errno == ENOMEM ? EAGAIN : errno; - lll_lock (stack_cache_lock, LLL_PRIVATE); /* Remove the thread from the list. */ @@ -657,7 +649,7 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp, is nothing we could do. */ (void) munmap (mem, size); - return err; + return errno; } pd->guardsize = guardsize; |