diff --git a/libraries/AP_Mission/AP_Mission.cpp b/libraries/AP_Mission/AP_Mission.cpp index bedc70ec91..39776795e9 100644 --- a/libraries/AP_Mission/AP_Mission.cpp +++ b/libraries/AP_Mission/AP_Mission.cpp @@ -1068,6 +1068,9 @@ bool AP_Mission::advance_current_nav_cmd() cmd_index++; } + // avoid endless loops + uint8_t max_loops = 255; + // search until we find next nav command or reach end of command list while (!_flags.nav_cmd_loaded) { // get next command @@ -1089,6 +1092,11 @@ bool AP_Mission::advance_current_nav_cmd() _do_cmd = cmd; _flags.do_cmd_loaded = true; _cmd_start_fn(_do_cmd); + } else { + // protect against endless loops of do-commands + if (max_loops-- == 0) { + return false; + } } } // move onto next command