mirror of
https://github.com/apache/nuttx.git
synced 2026-05-25 09:45:55 +08:00
sem: fix NULL pointer when open CONFIG_PRIORITY_INHERITANCE
set CONFIG_PRIORITY_INHERITANCE=y
set CONFIG_SEM_PREALLOCHOLDERS=0
semaphore/sem_holder.c:320:34: runtime error: member access within null pointer of type 'struct tcb_s'
#0 0xd8b540 in nxsem_boostholderprio semaphore/sem_holder.c:320
#1 0xd8c1cf in nxsem_boost_priority semaphore/sem_holder.c:703
#2 0xda5dfa in nxsem_wait semaphore/sem_wait.c:145
#3 0xda61d9 in nxsem_wait_uninterruptible semaphore/sem_wait.c:248
#4 0x12f2477 in media_service_thread0 /home/ligd/platform/dev/apps/examples/hello/hello_main.c:44
#5 0x1204154 in pthread_startup pthread/pthread_create.c:59
#6 0x1cd906f in pthread_start pthread/pthread_create.c:139
#7 0xe72fcb in pre_start sim/sim_initialstate.c:52
Signed-off-by: ligd <liguiding1@xiaomi.com>
This commit is contained in:
@@ -319,7 +319,7 @@ static int nxsem_boostholderprio(FAR struct semholder_s *pholder,
|
||||
* because the thread is already running at a sufficient priority.
|
||||
*/
|
||||
|
||||
if (rtcb->sched_priority > htcb->sched_priority)
|
||||
if (rtcb && htcb && rtcb->sched_priority > htcb->sched_priority)
|
||||
{
|
||||
/* Raise the priority of the holder of the semaphore. This
|
||||
* cannot cause a context switch because we have preemption
|
||||
@@ -757,14 +757,13 @@ void nxsem_release_holder(FAR sem_t *sem)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* The current task is not a holder */
|
||||
|
||||
DEBUGPANIC();
|
||||
#else
|
||||
pholder = &sem->holder;
|
||||
DEBUGASSERT(pholder->htcb == rtcb);
|
||||
nxsem_freeholder(sem, pholder);
|
||||
if (pholder->htcb)
|
||||
{
|
||||
DEBUGASSERT(pholder->htcb == rtcb);
|
||||
nxsem_freeholder(sem, pholder);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user