From 16b331cdc8d014264d17099f7034e45fca0bd7a8 Mon Sep 17 00:00:00 2001 From: patacongo Date: Tue, 26 Feb 2013 00:56:59 +0000 Subject: Minor changes to make OS test more robust in the presence of many memory allocation failures git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5672 42af7a65-404d-4744-a932-0658087f49c3 --- nuttx/configs/nutiny-nuc120/ostest/defconfig | 20 ++++++-------------- nuttx/sched/group_join.c | 1 + nuttx/sched/group_leave.c | 23 +++++++++++------------ 3 files changed, 18 insertions(+), 26 deletions(-) (limited to 'nuttx') diff --git a/nuttx/configs/nutiny-nuc120/ostest/defconfig b/nuttx/configs/nutiny-nuc120/ostest/defconfig index c7280484c..3256fb1eb 100644 --- a/nuttx/configs/nutiny-nuc120/ostest/defconfig +++ b/nuttx/configs/nutiny-nuc120/ostest/defconfig @@ -272,7 +272,7 @@ CONFIG_SIG_SIGCONDTIMEDOUT=16 # # Sizes of configurable things (0 disables) # -CONFIG_MAX_TASKS=16 +CONFIG_MAX_TASKS=8 CONFIG_MAX_TASK_ARGS=4 CONFIG_NPTHREAD_KEYS=4 CONFIG_NFILE_DESCRIPTORS=8 @@ -288,9 +288,9 @@ CONFIG_PREALLOC_TIMERS=4 # Stack and heap information # CONFIG_IDLETHREAD_STACKSIZE=1024 -CONFIG_USERMAIN_STACKSIZE=2048 +CONFIG_USERMAIN_STACKSIZE=1536 CONFIG_PTHREAD_STACK_MIN=256 -CONFIG_PTHREAD_STACK_DEFAULT=2048 +CONFIG_PTHREAD_STACK_DEFAULT=1536 # # Device Drivers @@ -397,7 +397,7 @@ CONFIG_SYMTAB_ORDEREDBYNAME=y # # Standard C Library Options # -CONFIG_STDIO_BUFFER_SIZE=64 +CONFIG_STDIO_BUFFER_SIZE=0 CONFIG_STDIO_LINEBUFFER=y CONFIG_NUNGET_CHARS=2 # CONFIG_LIBM is not set @@ -409,7 +409,7 @@ CONFIG_NUNGET_CHARS=2 CONFIG_EOL_IS_EITHER_CRLF=y # CONFIG_LIBC_EXECFUNCS is not set CONFIG_POSIX_SPAWN_PROXY_STACKSIZE=1024 -CONFIG_TASK_SPAWN_DEFAULT_STACKSIZE=2048 +CONFIG_TASK_SPAWN_DEFAULT_STACKSIZE=1536 # CONFIG_LIBC_STRERROR is not set # CONFIG_LIBC_PERROR_STDOUT is not set CONFIG_ARCH_LOWPUTC=y @@ -469,7 +469,7 @@ CONFIG_LIB_SENDFILE_BUFSIZE=512 CONFIG_EXAMPLES_OSTEST=y # CONFIG_EXAMPLES_OSTEST_BUILTIN is not set CONFIG_EXAMPLES_OSTEST_LOOPS=1 -CONFIG_EXAMPLES_OSTEST_STACKSIZE=2048 +CONFIG_EXAMPLES_OSTEST_STACKSIZE=1536 CONFIG_EXAMPLES_OSTEST_NBARRIER_THREADS=3 CONFIG_EXAMPLES_OSTEST_RR_RANGE=10000 CONFIG_EXAMPLES_OSTEST_RR_RUNS=10 @@ -493,10 +493,6 @@ CONFIG_EXAMPLES_OSTEST_RR_RUNS=10 # CONFIG_EXAMPLES_USBTERM is not set # CONFIG_EXAMPLES_WATCHDOG is not set -# -# Interpreters -# - # # Interpreters # @@ -524,10 +520,6 @@ CONFIG_EXAMPLES_OSTEST_RR_RUNS=10 # CONFIG_NETUTILS_UIPLIB is not set # CONFIG_NETUTILS_WEBCLIENT is not set -# -# ModBus -# - # # FreeModbus # diff --git a/nuttx/sched/group_join.c b/nuttx/sched/group_join.c index d6ca6d498..e760a62d2 100644 --- a/nuttx/sched/group_join.c +++ b/nuttx/sched/group_join.c @@ -116,6 +116,7 @@ static inline int group_addmember(FAR struct task_group_s *group, pid_t pid) if (!newmembers) { + sdbg("ERROR: Failed to reallocate tg_members\n"); return -ENOMEM; } diff --git a/nuttx/sched/group_leave.c b/nuttx/sched/group_leave.c index 490a66ec0..44c52a56d 100644 --- a/nuttx/sched/group_leave.c +++ b/nuttx/sched/group_leave.c @@ -245,7 +245,7 @@ static inline void group_release(FAR struct task_group_s *group) *****************************************************************************/ #ifdef HAVE_GROUP_MEMBERS -static inline int group_removemember(FAR struct task_group_s *group, pid_t pid) +static inline void group_removemember(FAR struct task_group_s *group, pid_t pid) { irqstate_t flags; int i; @@ -269,12 +269,8 @@ static inline int group_removemember(FAR struct task_group_s *group, pid_t pid) group->tg_members[i] = group->tg_members[group->tg_nmembers - 1]; group->tg_nmembers--; irqrestore(flags); - - return group->tg_nmembers; } } - - return -ENOENT; } #endif /* HAVE_GROUP_MEMBERS */ @@ -310,21 +306,24 @@ void group_leave(FAR struct tcb_s *tcb) DEBUGASSERT(tcb); - /* Make sure that we have a group */ + /* Make sure that we have a group. */ group = tcb->group; if (group) { - /* Remove the member from group */ + /* Remove the member from group. This function may be called + * during certain error handling before the PID has been + * added to the group. In this case tcb->pid will be uninitialized + * group_removemember() will fail. + */ - int ret = group_removemember(group, tcb->pid); - DEBUGASSERT(ret >= 0); + group_removemember(group, tcb->pid); - /* Is the group now empty? */ + /* Have all of the members left the group? */ - if (ret == 0) + if (group->tg_nmembers == 0) { - /* Release all of the resource held by the task group */ + /* Yes.. Release all of the resource held by the task group */ group_release(group); } -- cgit v1.2.3