aboutsummaryrefslogtreecommitdiff
path: root/src/drivers
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2013-12-10 15:09:36 +1100
committerLorenz Meier <lm@inf.ethz.ch>2013-12-10 12:07:03 +0100
commitcf78440ee6cb8c1469f53ca096d7388524facd59 (patch)
tree3651b188193920f96568d0f4882b164fbc67e08f /src/drivers
parentd43e3394b07b5999dff5d04a3dd77f96d76c1134 (diff)
downloadpx4-firmware-cf78440ee6cb8c1469f53ca096d7388524facd59.tar.gz
px4-firmware-cf78440ee6cb8c1469f53ca096d7388524facd59.tar.bz2
px4-firmware-cf78440ee6cb8c1469f53ca096d7388524facd59.zip
drv_hrt: added note on why an uninitialised hrt_call is safe
Diffstat (limited to 'src/drivers')
-rw-r--r--src/drivers/stm32/drv_hrt.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/drivers/stm32/drv_hrt.c b/src/drivers/stm32/drv_hrt.c
index dc28f446b..1bd251bc2 100644
--- a/src/drivers/stm32/drv_hrt.c
+++ b/src/drivers/stm32/drv_hrt.c
@@ -720,7 +720,6 @@ hrt_call_at(struct hrt_call *entry, hrt_abstime calltime, hrt_callout callout, v
void
hrt_call_every(struct hrt_call *entry, hrt_abstime delay, hrt_abstime interval, hrt_callout callout, void *arg)
{
- hrt_call_init(entry);
hrt_call_internal(entry,
hrt_absolute_time() + delay,
interval,
@@ -734,6 +733,13 @@ hrt_call_internal(struct hrt_call *entry, hrt_abstime deadline, hrt_abstime inte
irqstate_t flags = irqsave();
/* if the entry is currently queued, remove it */
+ /* note that we are using a potentially uninitialised
+ entry->link here, but it is safe as sq_rem() doesn't
+ dereference the passed node unless it is found in the
+ list. So we potentially waste a bit of time searching the
+ queue for the uninitialised entry->link but we don't do
+ anything actually unsafe.
+ */
if (entry->deadline != 0)
sq_rem(&entry->link, &callout_queue);