[Olsr-dev] Questions then

Henning Rogge (spam-protected)
Sat Feb 24 19:42:26 CET 2018


Hi,

the flags were most likely introduced at totally different times... if
I remember it correctly the "removed" flag is there to allow a timer
callback to stop/remove multiple other timers without the scheduler
loop going crazy because of a lost context.

As you can see with the OONF codebase, this could most likely be
cleaned up in OLSR too.

Henning Rogge

On Fri, Feb 23, 2018 at 2:59 PM, Kees-Jan Hermans <(spam-protected)> wrote:
> In src/scheduler.h, at line 95, I find:
>
> /* Timer flags */
> #define OLSR_TIMER_RUNNING  ( 1u << 0)   /* this timer is running */
> #define OLSR_TIMER_REMOVED  ( 1u << 1)   /* this timer is tagged for removal
> */
>
> which makes me wonder - is there a stage in between running and removed? Are
> there ’sleeping’ timers? What does it mean when a timer doesn’t have either
> flag set? This brings me to src/scheduler.c, at line 708:
>
>         /* This timer is expired, call into the provided callback function
> */
>         timer->timer_cb(timer->timer_cb_context);
>
>         /* Only act on actually running timers */
>         if (timer->timer_flags & OLSR_TIMER_RUNNING) {
>
> Shouldn’t the calling of the timer callback only be done when the timer has
> actual running status? In line 954 of the same file:
>
>   /* It's okay to get a NULL here */
>   if (!timer //
>       || !(timer->timer_flags & OLSR_TIMER_RUNNING)) {
>     return;
>   }
>
> My question: shouldn’t the sense of the condition be inversed to mean ‘is to
> be removed’ rather than ‘is not running’? This could well be because I don’t
> quite understand the difference between the two flags.
>
> Thanks in advance for your answers.
>
> m. vr. gr.  / Sincerely,
>
> KJ Hermans
> Marketeer High Assurance Products at Fox Crypto BV, Netherlands
> (spam-protected)
> +31 6 41454384
>
>
> --
> Olsr-dev mailing list
> (spam-protected)
> https://lists.olsr.org/mailman/listinfo/olsr-dev



More information about the Olsr-dev mailing list