From 9b80f0e22e3304c3389df7175628f2890f8ee827 Mon Sep 17 00:00:00 2001 From: patacongo Date: Thu, 26 Apr 2012 16:06:54 +0000 Subject: Fix instrumenation in task_delete(); fix prctl parameter order git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4659 42af7a65-404d-4744-a932-0658087f49c3 --- nuttx/sched/prctl.c | 30 ++++++++++++++++++++++++++++-- nuttx/sched/task_delete.c | 2 +- 2 files changed, 29 insertions(+), 3 deletions(-) (limited to 'nuttx') diff --git a/nuttx/sched/prctl.c b/nuttx/sched/prctl.c index 93d69ee02..c4ed373b9 100644 --- a/nuttx/sched/prctl.c +++ b/nuttx/sched/prctl.c @@ -88,9 +88,29 @@ int prctl(int option, ...) case PR_GET_NAME: #if CONFIG_TASK_NAME_SIZE > 0 { - int pid = va_arg(ap, int); + /* Get the prctl arguments */ + char *name = va_arg(ap, char *); - FAR _TCB *tcb = sched_gettcb(pid); + int pid = va_arg(ap, int); + FAR _TCB *tcb; + + /* Get the TCB associated with the PID (handling the special case of + * pid==0 meaning "this thread" + */ + + if (!pid) + { + tcb = (FAR _TCB *)g_readytorun.head; + } + else + { + tcb = sched_gettcb(pid); + } + + /* An invalid pid be indicated by a NULL TCB returned from + * sched_gettcb() + */ + if (!tcb) { sdbg("Pid does not correspond to a task: %d\n", pid); @@ -105,12 +125,18 @@ int prctl(int option, ...) goto errout; } + /* Now get or set the name */ + if (option == PR_SET_NAME) { + /* tcb->name may not be null-terminated */ + strncpy(tcb->name, name, CONFIG_TASK_NAME_SIZE); } else { + /* The returned value will be null-terminated, truncating if necessary */ + strncpy(name, tcb->name, CONFIG_TASK_NAME_SIZE-1); name[CONFIG_TASK_NAME_SIZE-1]; } diff --git a/nuttx/sched/task_delete.c b/nuttx/sched/task_delete.c index 5448260d5..a77bf80dd 100644 --- a/nuttx/sched/task_delete.c +++ b/nuttx/sched/task_delete.c @@ -184,7 +184,7 @@ int task_delete(pid_t pid) * layer that the task no longer exists. */ - sched_note_stop(tcb); + sched_note_stop(dtcb); /* Deallocate its TCB */ -- cgit v1.2.3