summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2009-05-19 19:30:57 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2009-05-19 19:30:57 +0000
commit8f8f7290aab5e30da6bcd37d4c74ee1179a4a75a (patch)
treed25b51d01958ce71b9962709156a110f48a3c73c
parentc78044f00e4064f5e8cf045e7accfa571893f742 (diff)
downloadnuttx-8f8f7290aab5e30da6bcd37d4c74ee1179a4a75a.tar.gz
nuttx-8f8f7290aab5e30da6bcd37d4c74ee1179a4a75a.tar.bz2
nuttx-8f8f7290aab5e30da6bcd37d4c74ee1179a4a75a.zip
pthread_create must return a positive errno on failure
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@1799 42af7a65-404d-4744-a932-0658087f49c3
-rw-r--r--nuttx/sched/pthread_create.c30
-rw-r--r--nuttx/sched/sched_setuppthreadfiles.c27
-rw-r--r--nuttx/sched/task_activate.c2
3 files changed, 34 insertions, 25 deletions
diff --git a/nuttx/sched/pthread_create.c b/nuttx/sched/pthread_create.c
index e51512573..836b422c6 100644
--- a/nuttx/sched/pthread_create.c
+++ b/nuttx/sched/pthread_create.c
@@ -109,7 +109,7 @@ static const char g_pthreadname[] = "<pthread>";
* If no parameters are required, argv may be NULL.
*
* Return Value:
- * OK
+ * None
*
****************************************************************************/
@@ -155,7 +155,7 @@ static void pthread_argsetup(FAR _TCB *tcb, pthread_addr_t arg)
* pjoin
*
* Return Value:
- * None or pointer to the found entry.
+ * None
*
* Assumptions:
* The caller has provided protection from re-entrancy.
@@ -235,6 +235,11 @@ static void pthread_start(void)
* attr
* start_routine
* arg
+ *
+ * Returned value:
+ * OK (0) on success; a (non-negated) errno value on failure. The errno
+ * variable is not set.
+ *
****************************************************************************/
int pthread_create(FAR pthread_t *thread, FAR pthread_attr_t *attr,
@@ -261,16 +266,16 @@ int pthread_create(FAR pthread_t *thread, FAR pthread_attr_t *attr,
ptcb = (FAR _TCB*)kzmalloc(sizeof(_TCB));
if (!ptcb)
{
- *get_errno_ptr() = ENOMEM;
- return ERROR;
+ return ENOMEM;
}
/* Associate file descriptors with the new task */
- if (sched_setuppthreadfiles(ptcb) != OK)
+ status = sched_setuppthreadfiles(ptcb);
+ if (status != OK)
{
sched_releasetcb(ptcb);
- return ERROR;
+ return status;
}
/* Share the parent's envionment */
@@ -283,7 +288,7 @@ int pthread_create(FAR pthread_t *thread, FAR pthread_attr_t *attr,
if (!pjoin)
{
sched_releasetcb(ptcb);
- return ERROR;
+ return ENOMEM;
}
/* Allocate the stack for the TCB */
@@ -293,7 +298,7 @@ int pthread_create(FAR pthread_t *thread, FAR pthread_attr_t *attr,
{
sched_releasetcb(ptcb);
sched_free(pjoin);
- return ERROR;
+ return ENOMEM;
}
/* Should we use the priority and scheduler specified in the
@@ -345,7 +350,7 @@ int pthread_create(FAR pthread_t *thread, FAR pthread_attr_t *attr,
sched_releasetcb(ptcb);
sched_free(pjoin);
- return ERROR;
+ return EBUSY;
}
/* Mark this task as a pthread */
@@ -385,7 +390,10 @@ int pthread_create(FAR pthread_t *thread, FAR pthread_attr_t *attr,
/* Initialize the semaphores in the join structure to zero. */
status = sem_init(&pjoin->data_sem, 0, 0);
- if (status == OK) status = sem_init(&pjoin->exit_sem, 0, 0);
+ if (status == OK)
+ {
+ status = sem_init(&pjoin->exit_sem, 0, 0);
+ }
/* Activate the task */
@@ -419,7 +427,7 @@ int pthread_create(FAR pthread_t *thread, FAR pthread_attr_t *attr,
(void)sem_destroy(&pjoin->exit_sem);
sched_releasetcb(ptcb);
sched_free(pjoin);
- return ERROR;
+ return EIO;
}
return OK;
}
diff --git a/nuttx/sched/sched_setuppthreadfiles.c b/nuttx/sched/sched_setuppthreadfiles.c
index 5b97a46c5..a28a042c0 100644
--- a/nuttx/sched/sched_setuppthreadfiles.c
+++ b/nuttx/sched/sched_setuppthreadfiles.c
@@ -1,7 +1,7 @@
-/************************************************************
+/****************************************************************************
* sched_setuppthreadfiles.c
*
- * Copyright (C) 2007 Gregory Nutt. All rights reserved.
+ * Copyright (C) 2007, 2009 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
*
* Redistribution and use in source and binary forms, with or without
@@ -14,7 +14,7 @@
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
- * 3. Neither the name Gregory Nutt nor the names of its contributors may be
+ * 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
@@ -31,11 +31,11 @@
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
- ************************************************************/
+ ****************************************************************************/
-/************************************************************
+/****************************************************************************
* Included Files
- ************************************************************/
+ ****************************************************************************/
#include <nuttx/config.h>
@@ -49,15 +49,15 @@
#if CONFIG_NFILE_DESCRIPTORS > 0 || CONFIG_NSOCKET_DESCRIPTORS > 0
-/************************************************************
+/****************************************************************************
* Private Functions
- ************************************************************/
+ ****************************************************************************/
-/************************************************************
+/****************************************************************************
* Public Functions
- ************************************************************/
+ ****************************************************************************/
-/************************************************************
+/****************************************************************************
* Function: sched_setuppthreadfiles
*
* Description:
@@ -68,11 +68,12 @@
* tcb - tcb of the new task.
*
* Return Value:
- * None
+ * OK (if an error were returned, it would need to be a non-negated
+ * errno value).
*
* Assumptions:
*
- ************************************************************/
+ ****************************************************************************/
int sched_setuppthreadfiles(FAR _TCB *tcb)
{
diff --git a/nuttx/sched/task_activate.c b/nuttx/sched/task_activate.c
index d22593147..e324e17a3 100644
--- a/nuttx/sched/task_activate.c
+++ b/nuttx/sched/task_activate.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * task_activate.c
+ * sched/task_activate.c
*
* Copyright (C) 2007-2009 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>