diff --git a/src/core/gpu_thread.cpp b/src/core/gpu_thread.cpp
index 00d8f57c7..7e26c5716 100644
--- a/src/core/gpu_thread.cpp
+++ b/src/core/gpu_thread.cpp
@@ -537,6 +537,13 @@ void GPUThread::Internal::GPUThreadEntryPoint()
 
 void GPUThread::Internal::DoRunIdle()
 {
+  if (!g_gpu_device->HasMainSwapChain()) [[unlikely]]
+  {
+    // only happens during language switch
+    Timer::NanoSleep(16 * 1000 * 1000);
+    return;
+  }
+
   if (!PresentFrameAndRestoreContext())
     return;