diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp
index 7e8d33a38fb169b042d9f09aa17ecedd19d2fb2a..7ece6027050a871911bde1832f3b25b5ca8c1392 100644
--- a/Marlin/src/gcode/gcode.cpp
+++ b/Marlin/src/gcode/gcode.cpp
@@ -138,9 +138,9 @@ void GcodeSuite::dwell(millis_t time) {
 
   void GcodeSuite::G29_with_retry() {
     set_bed_leveling_enabled(false);
-    for (uint8_t i = G29_MAX_RETRIES; i--;) {
+    for (uint8_t retries_left = G29_MAX_RETRIES;;) {
       G29();
-      if (planner.leveling_active) break;
+      if (planner.leveling_active || !retries_left--) break;
       #ifdef G29_ACTION_ON_RECOVER
         SERIAL_ECHOLNPGM("//action:" G29_ACTION_ON_RECOVER);
       #endif