diff options
author | Gregory Nutt <gnutt@nuttx.org> | 2013-05-12 11:47:09 -0600 |
---|---|---|
committer | Gregory Nutt <gnutt@nuttx.org> | 2013-05-12 11:47:09 -0600 |
commit | 761d051218d4bf29a71532d7e67a18beda63cb30 (patch) | |
tree | cf7f509dda831dcc7257e379e4d241a01348f08e /NxWidgets/nxwm/src | |
parent | 9cbcaf0b572ee505767e47fcc41cfe660c8e3ae3 (diff) | |
download | nuttx-761d051218d4bf29a71532d7e67a18beda63cb30.tar.gz nuttx-761d051218d4bf29a71532d7e67a18beda63cb30.tar.bz2 nuttx-761d051218d4bf29a71532d7e67a18beda63cb30.zip |
Fixe a race confition in NxWM::CCalibration
Diffstat (limited to 'NxWidgets/nxwm/src')
-rw-r--r-- | NxWidgets/nxwm/src/ccalibration.cxx | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/NxWidgets/nxwm/src/ccalibration.cxx b/NxWidgets/nxwm/src/ccalibration.cxx index 32aeb5ee6..04233d5ef 100644 --- a/NxWidgets/nxwm/src/ccalibration.cxx +++ b/NxWidgets/nxwm/src/ccalibration.cxx @@ -1,7 +1,7 @@ /**************************************************************************** * NxWidgets/nxwm/src/ccalibration.cxx * - * Copyright (C) 2012 Gregory Nutt. All rights reserved. + * Copyright (C) 2012-2013 Gregory Nutt. All rights reserved. * Author: Gregory Nutt <gnutt@nuttx.org> * * Redistribution and use in source and binary forms, with or without @@ -247,26 +247,34 @@ void CCalibration::hide(void) void CCalibration::redraw(void) { - gvdbg("Entry\n"); + uint8_t waitcount = 0; - // Is the calibration thread running? We might have to restart it if - // we have completed the calibration early but are being brought to - // top of the display again + gvdbg("Entry\n"); - // Is the calibration thread running? + // Is the calibration thread still running? We might have to restart + // it if we have completed the calibration early but are being brought + // to top of the display again - if (!isRunning()) + if (!isStarted()) { gvdbg("Starting calibration: m_calthread=%d\n", (int)m_calthread); (void)startCalibration(CALTHREAD_SHOW); } + // Is the calibration thread running? If not, then wait until it is. + + while (!isRunning() && (++waitcount < 10)) + { + usleep(500); + } + // The calibration thread is running. Make sure that is is not // already processing a redraw - else if (m_calthread != CALTHREAD_SHOW) + if (m_calthread != CALTHREAD_SHOW) { - // Ask the calibration thread to restart the calibration and redraw the display + // Ask the calibration thread to restart the calibration and redraw + // the display m_calthread = CALTHREAD_SHOW; (void)pthread_kill(m_thread, CONFIG_NXWM_CALIBRATION_SIGNO); |