diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2009-05-19 19:30:57 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2009-05-19 19:30:57 +0000 |
commit | 8f8f7290aab5e30da6bcd37d4c74ee1179a4a75a (patch) | |
tree | d25b51d01958ce71b9962709156a110f48a3c73c | |
parent | c78044f00e4064f5e8cf045e7accfa571893f742 (diff) | |
download | px4-nuttx-8f8f7290aab5e30da6bcd37d4c74ee1179a4a75a.tar.gz px4-nuttx-8f8f7290aab5e30da6bcd37d4c74ee1179a4a75a.tar.bz2 px4-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.c | 30 | ||||
-rw-r--r-- | nuttx/sched/sched_setuppthreadfiles.c | 27 | ||||
-rw-r--r-- | nuttx/sched/task_activate.c | 2 |
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> |