forked from Archive/PX4-Autopilot
drv_hrt: added note on why an uninitialised hrt_call is safe
This commit is contained in:
parent
d43e3394b0
commit
cf78440ee6
|
@ -720,7 +720,6 @@ hrt_call_at(struct hrt_call *entry, hrt_abstime calltime, hrt_callout callout, v
|
||||||
void
|
void
|
||||||
hrt_call_every(struct hrt_call *entry, hrt_abstime delay, hrt_abstime interval, hrt_callout callout, void *arg)
|
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_call_internal(entry,
|
||||||
hrt_absolute_time() + delay,
|
hrt_absolute_time() + delay,
|
||||||
interval,
|
interval,
|
||||||
|
@ -734,6 +733,13 @@ hrt_call_internal(struct hrt_call *entry, hrt_abstime deadline, hrt_abstime inte
|
||||||
irqstate_t flags = irqsave();
|
irqstate_t flags = irqsave();
|
||||||
|
|
||||||
/* if the entry is currently queued, remove it */
|
/* 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)
|
if (entry->deadline != 0)
|
||||||
sq_rem(&entry->link, &callout_queue);
|
sq_rem(&entry->link, &callout_queue);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue