Skip to content

Commit

Permalink
Fix an assertion
Browse files Browse the repository at this point in the history
  • Loading branch information
gregory-nutt committed Jun 2, 2013
1 parent 77bb79e commit 53c51e0
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 5 deletions.
2 changes: 2 additions & 0 deletions nuttx/ChangeLog
Original file line number Diff line number Diff line change
Expand Up @@ -4868,3 +4868,5 @@
the SAM4L (2013-6-2).
* libc/stdio/lib_dprintd.c and lib_vdprintf.c: Add dprintf() and
vdprintf() (the latter from Andrew Tridgell, 2013-6-2).
* sched/sem_holder.c: Modify assertion that is reported to cause
false alarm assertions (2013-6-2).
2 changes: 1 addition & 1 deletion nuttx/libc/stdio/Make.defs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
# This first group of C files do not depend on having file descriptors or
# C streams.

CSRCS += lib_fileno.c lib_printf.c lib_syslog.c lib_lowsyslog.c\
CSRCS += lib_fileno.c lib_printf.c lib_syslog.c lib_lowsyslog.c \
lib_sprintf.c lib_asprintf.c lib_snprintf.c lib_libsprintf.c \
lib_vsprintf.c lib_avsprintf.c lib_vsnprintf.c lib_libvsprintf.c \
lib_dprintf.c lib_vdprintf.c \
Expand Down
2 changes: 1 addition & 1 deletion nuttx/libc/stdio/lib_vdprintf.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,4 +56,4 @@ int vdprintf(int fd, FAR const char *fmt, va_list ap)

lib_rawoutstream(&rawoutstream, fd);
return lib_vsprintf(&rawoutstream.public, fmt, ap);
}
}
17 changes: 14 additions & 3 deletions nuttx/sched/sem_holder.c
Original file line number Diff line number Diff line change
Expand Up @@ -448,11 +448,22 @@ static int sem_restoreholderprio(FAR struct semholder_s *pholder, FAR sem_t *sem

if (htcb->npend_reprio < 1)
{
/* No... the holder thread has only been boosted once. Reset all
* priorities back to the base priority.
/* No... the holder thread has only been boosted once.
* npend_reprio should be 0 and the boosted priority should be the
* priority of the task that just got the semaphore
* (stcb->sched_priority)
*
* That latter assumption may not be true if the stcb's priority
* was also boosted so that it no longer matches the htcb's
* sched_priority. Or if CONFIG_SEM_NNESTPRIO is too small (so
* that we do not have a proper record of the reprioritizations).
*/

DEBUGASSERT(htcb->sched_priority == stcb->sched_priority && htcb->npend_reprio == 0);
DEBUGASSERT(/* htcb->sched_priority == stcb->sched_priority && */
htcb->npend_reprio == 0);

/* Reset the holder's priority back to the base priority. */

sched_reprioritize(htcb, htcb->base_priority);
}

Expand Down

0 comments on commit 53c51e0

Please sign in to comment.