about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--nptl/ChangeLog4
-rw-r--r--nptl/allocatestack.c16
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;