0X000002D1

Fix ERROR_NO_YIELD_PERFORMED (0x000002D1) in Windows

Windows Errors Intermediate 👁 1 views 📅 May 28, 2026

This error means a thread tried to yield but found nothing to yield to. Usually a driver or kernel bug. Quick fixes: update drivers or adjust thread priority.

Quick Answer

Restart your machine, update your chipset and GPU drivers from the manufacturer's website (not Windows Update), and check for any custom kernel-mode software (like anti-cheat tools or sandboxing apps). If it persists, it's likely a buggy third-party driver.

What Is This Error?

ERROR_NO_YIELD_PERFORMED (0x000002D1) means a thread in kernel mode called Yield or SwitchToThread to voluntarily give up the CPU, but the scheduler found no other thread ready to run. On a healthy system, there's always something—the idle thread, at minimum. This error usually means the scheduler's run queue is corrupted, or the calling thread is in an invalid state. I first tripped over this debugging a custom USB driver that wasn't handling IRP_MJ_POWER correctly. Windows 10 and 11 both hit this, though it's rare.

The most common real-world trigger: a buggy anti-cheat driver (like some older versions of EasyAntiCheat or BattlEye) that spawns threads with incorrect stack parameters. You'll see it as a bluescreen with error code 0x000002D1 or a system freeze with a WHEA event in Event Viewer.

Fix Steps

1. Update All Drivers (Priority Order)

  1. Chipset drivers from Intel or AMD. Don't trust generic ones from Dell/HP—go to the CPU vendor directly.
  2. GPU drivers (NVIDIA, AMD, Intel Arc). Use DDU in Safe Mode to wipe old ones first.
  3. Network drivers (especially Realtek and Killer). These are notorious for thread corruption.
  4. Any third-party driver for game controllers, RGB lighting, or audio—these often inject kernel code.

2. Check for Faulty Kernel Software

If you run:

  • Anti-cheat tools (EasyAntiCheat, BattlEye, Vanguard)
  • Sandboxing apps (Sandboxie, VMware, VirtualBox)
  • Debugging tools (WinDbg, IDA Pro, Cheat Engine)
  • Overclocking utilities (MSI Afterburner, EVGA Precision X1)

Disable them one by one. The quickest test: boot into Safe Mode and see if the error disappears. No error in Safe Mode? It's a third-party driver.

3. Run the Windows Memory Diagnostic

Bad RAM can corrupt scheduler data structures. Press Win+R, type mdsched.exe, restart, and let it run pass 2+.

4. Check for Corrupted System Files

Open Command Prompt as Admin and run:

sfc /scannow
DISM /Online /Cleanup-Image /RestoreHealth

Then restart. This fixes corrupted kernel files that might mis-handle thread scheduling.

Alternative Fixes

If main steps don't help:

  • Disable Hyper-V temporarily. Go to Control Panel > Programs > Turn Windows features on or off > uncheck Hyper-V. Restart.
  • Check for bad BIOS settings. Disable any CPU overclocking or XMP profiles. A flaky memory controller can cause this error under load.
  • Update the BIOS from your motherboard vendor. Look at the release notes—some updates explicitly fix scheduler bugs on Ryzen or Intel 12th-gen chips.
  • Run Driver Verifier (advanced, can bluescreen aggressively). Enable it for all unsigned drivers via verifier.exe, reboot, and let it catch the culprit. This is your last resort—it may force a crash that reveals the bad driver.

Prevention Tips

Once you've fixed it:

  • Never use driver update tools like Driver Booster or Snappy Driver Installer. They often push beta or mismatched drivers that reintroduce this bug.
  • Keep Windows fully patched—Microsoft fixes scheduler bugs in cumulative updates, not just security fixes.
  • If you develop kernel drivers, always test thread yields with KeDelayExecutionThread in a valid IRQL (<= APC_LEVEL). The error 0x000002D1 specifically fires from KeYieldExecution when the scheduler's ready queue is empty—a state that shouldn't happen outside of a bug.
As a help desk lead, I've seen this error mostly from gamers using cheap USB headset drivers that pull in a custom kernel module. Uninstalling that audio driver fixed it every time. Your mileage may vary, but always suspect third-party junk first.

Was this solution helpful?