From 8f8f7290aab5e30da6bcd37d4c74ee1179a4a75a Mon Sep 17 00:00:00 2001 From: patacongo Date: Tue, 19 May 2009 19:30:57 +0000 Subject: 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 --- nuttx/sched/pthread_create.c | 30 +++++++++++++++++++----------- nuttx/sched/sched_setuppthreadfiles.c | 27 ++++++++++++++------------- nuttx/sched/task_activate.c | 2 +- 3 files changed, 34 insertions(+), 25 deletions(-) (limited to 'nuttx') 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[] = ""; * 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 * * 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 @@ -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 -- cgit v1.2.3