NxWM::CNxConsole when NSH window is closed by touching toolbar icon, need to suppress certain activities performed by the on_exit() handler

git-svn-id: https://nuttx.svn.sourceforge.net/svnroot/nuttx/trunk@4739 7fd9a85b-ad96-42d3-883c-3090e2eb8679
This commit is contained in:
patacongo 2012-05-15 01:20:34 +00:00
parent 519ab1856f
commit 2a7d40522f
1 changed files with 26 additions and 8 deletions

View File

@ -287,12 +287,23 @@ bool CNxConsole::run(void)
void CNxConsole::stop(void)
{
// Delete the NxConsole task if it is still running (this could strand resources).
// Delete the NxConsole task if it is still running (this could strand
// resources). If we get here due to CTaskbar::stopApplication() processing
// initialed by CNxConsole::exitHandler, then do *not* delete the task (it
// is already being delete).
if (m_pid >= 0)
{
task_delete(m_pid);
// Calling task_delete() will also invoke the on_exit() handler. We se
// m_pid = -1 before calling task_delete() to let the on_exit() handler,
// CNxConsole::exitHandler(), know that it should not do anything
pid_t pid = m_pid;
m_pid = -1;
// Then delete the NSH task, possibly stranding resources
task_delete(pid);
}
// Destroy the NX console device
@ -458,15 +469,22 @@ void CNxConsole::exitHandler(int code, FAR void *arg)
{
CNxConsole *This = (CNxConsole *)arg;
// Set m_pid to -1 to prevent calling detlete_task() in CNxConsole::stop().
// CNxConsole::stop() is called by the processing initiated by the following
// call to CTaskbar::stopApplication()
// If we got here because of the task_delete() call in CNxConsole::stop(),
// then m_pid will be set to -1 to let us know that we do not need to do
// anything
This->m_pid = -1;
if (This->m_pid >= 0)
{
// Set m_pid to -1 to prevent calling detlete_task() in CNxConsole::stop().
// CNxConsole::stop() is called by the processing initiated by the following
// call to CTaskbar::stopApplication()
// Remove the NxConsole application from the taskbar
This->m_pid = -1;
This->m_taskbar->stopApplication(This);
// Remove the NxConsole application from the taskbar
This->m_taskbar->stopApplication(This);
}
}
/**