In MaintenanceManager::RunSchedulerThread(), an op gets selected, running_ops_ is incremented, and Prepare() is called on the op. If Prepare() returns false, the op isn't run, so running_ops_ never gets decremented. If Prepare() ever fails, then this could be a problem, as the maintenance manager compares running_ops_ to the number of operation threads to determine whether or not it can run another operation. Prepare generally doesn't fail, but if Tablet::AlterSchema() is called in between FlushMRSOp::UpdateStats() and FlushMRSOp::Prepare(), that is one instance where Prepare() could potentially fail.
To fix, decrement running_ops_ in the codepath that follows from Prepare() failing.