diff --git a/sys/xtimer/xtimer_core.c b/sys/xtimer/xtimer_core.c index 1ac645838e9c..22f9c7c3d186 100644 --- a/sys/xtimer/xtimer_core.c +++ b/sys/xtimer/xtimer_core.c @@ -170,6 +170,11 @@ static inline void _lltimer_set(uint32_t target) int _xtimer_set_absolute(xtimer_t *timer, uint32_t target) { + unsigned state = irq_disable(); + if (_is_set(timer)) { + _remove(timer); + } + uint32_t now = _xtimer_now(); int res = 0; @@ -178,16 +183,12 @@ int _xtimer_set_absolute(xtimer_t *timer, uint32_t target) timer->next = NULL; if ((target >= now) && ((target - XTIMER_BACKOFF) < now)) { /* backoff */ + irq_restore(state); xtimer_spin_until(target + XTIMER_BACKOFF); _shoot(timer); return 0; } - unsigned state = irq_disable(); - if (_is_set(timer)) { - _remove(timer); - } - timer->target = target; timer->long_target = _long_cnt; if (target < now) {