summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpatacongo <patacongo@7fd9a85b-ad96-42d3-883c-3090e2eb8679>2012-09-02 13:37:28 +0000
committerpatacongo <patacongo@7fd9a85b-ad96-42d3-883c-3090e2eb8679>2012-09-02 13:37:28 +0000
commit06390e88a02a9c3c08e2466a10cb9848d41b44be (patch)
treefe120379f9e5870a741b4ec5a7f88e3f70c2df3b
parentd7a1aab1a2e2e1cedc78a7bb32f9d3bd95da2251 (diff)
Fix workqueue assertion; STM32 power management
git-svn-id: https://nuttx.svn.sourceforge.net/svnroot/nuttx/trunk@5079 7fd9a85b-ad96-42d3-883c-3090e2eb8679
-rw-r--r--nuttx/ChangeLog3
-rw-r--r--nuttx/configs/stm3210e-eval/src/up_idle.c5
-rw-r--r--nuttx/sched/work_cancel.c12
3 files changed, 14 insertions, 6 deletions
diff --git a/nuttx/ChangeLog b/nuttx/ChangeLog
index 3ba81d4a7e..b67c066bcb 100644
--- a/nuttx/ChangeLog
+++ b/nuttx/ChangeLog
@@ -3247,3 +3247,6 @@
logic from mksyscall.c into files where it can be shared.
* tools/mksymtab.c: Add a tool that can be used to convert a CSV file
into a NuttX-style symbol table.
+ * sched/work_cancel.c: Fix a bad assertion (reported by Mike Smith)
+ * configs/stm3210e-eval/src/up_idle.c: Correct some power management
+ compilation errors (reported by Diego Sanchez).
diff --git a/nuttx/configs/stm3210e-eval/src/up_idle.c b/nuttx/configs/stm3210e-eval/src/up_idle.c
index 910d0a9d6c..7b682e2bb1 100644
--- a/nuttx/configs/stm3210e-eval/src/up_idle.c
+++ b/nuttx/configs/stm3210e-eval/src/up_idle.c
@@ -277,11 +277,10 @@ static void up_idlepm(void)
{
/* Resume normal operation */
- newstate = PM_NORMAL:
+ newstate = PM_NORMAL;
}
}
else
-#endif
{
/* Let the PM system decide, which power saving level can be obtained */
@@ -413,7 +412,7 @@ errout:
}
#else
# define up_idlepm()
-#endif
+#endif /* CONFIG_PM */
/****************************************************************************
* Public Functions
diff --git a/nuttx/sched/work_cancel.c b/nuttx/sched/work_cancel.c
index c277f024d2..30b650826b 100644
--- a/nuttx/sched/work_cancel.c
+++ b/nuttx/sched/work_cancel.c
@@ -104,10 +104,16 @@ int work_cancel(struct work_s *work)
flags = irqsave();
if (work->worker != NULL)
{
- DEBUGASSERT(work->dq.flink || (FAR dq_entry_t *)work == g_work.head);
- DEBUGASSERT(work->dq.blink || (FAR dq_entry_t *)work == g_work.tail);
- dq_rem((FAR dq_entry_t *)work, &g_work);
+ /* A little test of the integrity of the work queue */
+
+ DEBUGASSERT(work->dq.flink ||(FAR dq_entry_t *)work == g_work.tail);
+ DEBUGASSERT(work->dq.blink ||(FAR dq_entry_t *)work == g_work.head);
+ /* Remove the entry from the work queue and make sure that it is
+ * mark as availalbe (i.e., the worker field is nullified).
+ */
+
+ dq_rem((FAR dq_entry_t *)work, &g_work);
work->worker = NULL;
}