mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-04-14 10:07:39 +08:00
Cosmetic cleanup from SIGCHLD changes
git-svn-id: http://svn.code.sf.net/p/nuttx/code/trunk@5514 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
parent
b58281cab8
commit
ffda55b34a
@ -57,7 +57,12 @@ static bool threadexited = false;
|
||||
#ifdef CONFIG_SCHED_HAVE_PARENT
|
||||
static void death_of_child(int signo, siginfo_t *info, void *ucontext)
|
||||
{
|
||||
/* Use of printf in a signal handler is NOT safe! It can cause deadlocks! */
|
||||
/* Use of printf in a signal handler is NOT safe! It can cause deadlocks!
|
||||
* Also, signals are not queued by NuttX. As a consequence, some
|
||||
* notifications will get lost (or the info data can be overwrittedn)!
|
||||
* Because POSIX does not require signals to be queued, I do not think
|
||||
* that this is a bug (the overwriting is a bug, however).
|
||||
*/
|
||||
|
||||
if (info)
|
||||
{
|
||||
|
||||
@ -3918,7 +3918,7 @@
|
||||
the scenario: (1) sched_lock() is called increments the lockcount
|
||||
on the current TCB (i.e., the one at the head of the ready to run
|
||||
list), (2) sched_mergepending is called which may change the task
|
||||
at the head of the readytorun list, then (2) sched_lock() is called
|
||||
at the head of the readytorun list, then (2) sched_unlock() is called
|
||||
which decrements the lockcount on the wrong TCB. The failure case
|
||||
that I saw was that pre-emption got disabled in the IDLE thread,
|
||||
locking up the whole system.
|
||||
|
||||
@ -115,9 +115,12 @@ int task_deletecurrent(void)
|
||||
* does not correspond to the thread that is running. Disabling pre-
|
||||
* emption on this TCB and marking the new ready-to-run task as not
|
||||
* running (see, for example, get_errno_ptr()).
|
||||
*
|
||||
* We disable pre-emption here by directly incrementing the lockcount
|
||||
* (vs. calling sched_lock()).
|
||||
*/
|
||||
|
||||
sched_lock();
|
||||
rtcb->lockcount++;
|
||||
rtcb->task_state = TSTATE_TASK_READYTORUN;
|
||||
|
||||
/* Move the TCB to the specified blocked task list and delete it */
|
||||
@ -143,7 +146,6 @@ int task_deletecurrent(void)
|
||||
* the lockcount on rctb.
|
||||
*/
|
||||
|
||||
DEBUGASSERT(rtcb->lockcount > 0);
|
||||
rtcb->lockcount--;
|
||||
return OK;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user