diff --git a/core/sched.cc b/core/sched.cc
index 1c23512c0d79be527b2eae6f3ded6ed1da2fce5e..85d36d44372983b54d2d1a4bd797317cfe493a09 100644
--- a/core/sched.cc
+++ b/core/sched.cc
@@ -1064,10 +1064,11 @@ void timer_base::expire()
 void timer_base::set(osv::clock::uptime::time_point time)
 {
     trace_timer_set(this, time.time_since_epoch().count());
-    _state = state::armed;
-    _time = time;
     irq_save_lock_type irq_lock;
     WITH_LOCK(irq_lock) {
+        _state = state::armed;
+        _time = time;
+
         auto& timers = cpu::current()->timers;
         timers._list.insert(*this);
         _t._active_timers.push_back(*this);