diff options
author | patacongo <patacongo@7fd9a85b-ad96-42d3-883c-3090e2eb8679> | 2012-05-15 01:20:34 +0000 |
---|---|---|
committer | patacongo <patacongo@7fd9a85b-ad96-42d3-883c-3090e2eb8679> | 2012-05-15 01:20:34 +0000 |
commit | 2a7d40522f7e5a9cf9029ded28eae8660cdbccc0 (patch) | |
tree | 454ac170d0580646b5559ff6f1fd0c1c31cfee13 /NxWidgets | |
parent | 519ab1856fb8c69ff2bb15e512bdb8539c90129c (diff) | |
download | px4-firmware-2a7d40522f7e5a9cf9029ded28eae8660cdbccc0.tar.gz px4-firmware-2a7d40522f7e5a9cf9029ded28eae8660cdbccc0.tar.bz2 px4-firmware-2a7d40522f7e5a9cf9029ded28eae8660cdbccc0.zip |
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
Diffstat (limited to 'NxWidgets')
-rw-r--r-- | NxWidgets/nxwm/src/cnxconsole.cxx | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/NxWidgets/nxwm/src/cnxconsole.cxx b/NxWidgets/nxwm/src/cnxconsole.cxx index 79baf67d9..855bd3d0b 100644 --- a/NxWidgets/nxwm/src/cnxconsole.cxx +++ b/NxWidgets/nxwm/src/cnxconsole.cxx @@ -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() + + This->m_pid = -1; - // Remove the NxConsole application from the taskbar + // Remove the NxConsole application from the taskbar - This->m_taskbar->stopApplication(This); + This->m_taskbar->stopApplication(This); + } } /** |