diff --git a/src/core/LockSurface.cpp b/src/core/LockSurface.cpp index 9ab54ae..0edbea6 100644 --- a/src/core/LockSurface.cpp +++ b/src/core/LockSurface.cpp @@ -105,6 +105,13 @@ void CSessionLockSurface::configure(const Vector2D& size_, uint32_t serial_) { readyForFrame = false; return; } + + // Disable vsync throttling so eglSwapBuffers never blocks waiting for + // wl_buffer.release. Without this, a DPMS-off monitor can stall the main + // thread indefinitely because the compositor never releases the buffer. + // Rendering rate is already governed by wl_surface.frame callbacks. + g_pEGL->makeCurrent(eglSurface); + eglSwapInterval(g_pEGL->eglDisplay, 0); } if (readyForFrame && !(SAMESIZE && SAMESCALE)) {