diff --git a/src/system/kernel/timer.cpp b/src/system/kernel/timer.cpp index 05b19d3a95..edf92efb31 100644 --- a/src/system/kernel/timer.cpp +++ b/src/system/kernel/timer.cpp @@ -77,6 +77,7 @@ timer_interrupt() spinlock *spinlock; per_cpu_timer_data& cpuData = sPerCPU[smp_get_current_cpu()]; int32 rc = B_HANDLED_INTERRUPT; + bool invokeScheduler = false; TRACE(("timer_interrupt: time %lld, cpu %ld\n", system_time(), smp_get_current_cpu())); @@ -121,6 +122,9 @@ timer_interrupt() if ((mode & B_TIMER_ACQUIRE_THREAD_LOCK) != 0) RELEASE_THREAD_LOCK(); + + if (rc == B_INVOKE_SCHEDULER) + invokeScheduler = true; } cpuData.current_event_in_progress = 0; @@ -153,7 +157,7 @@ timer_interrupt() release_spinlock(spinlock); - return rc; + return invokeScheduler ? B_INVOKE_SCHEDULER : rc; }