From caafb2b06bb5ae71e1de719292a0b8a233a21757 Mon Sep 17 00:00:00 2001 From: Carlos O'Donell Date: Wed, 14 Dec 2011 21:32:11 -0500 Subject: Return errno on failure in allocate_stack In cases where a function call fails return errno and allow the caller to fixup the return code as required by their API. --- nptl/ChangeLog | 4 ++++ 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 + + * allocatestack.c (allocate_stack): Return errno on failure. + 2011-12-14 Jeff Law [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; -- cgit 1.4.1