+40
−11
Loading
Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more
This addresses bugs where unexpected edge cases in the snapshot state could prevent a merge or data wipe from completing in recovery. Invalid snapshots (eg on the wrong slot) are now ignored in CheckMergeState(). This prevents those snapshots from being detected as "cancelled" and thus falling into RemoveAllUpdateState. ProcessUpdateState will no longer call RemoveAllUpdateState in recovery. Furthermore, when RemoveAllUpdateState fails, we will no longer return the "old" state. If this state is Merging, ProcessUpdateState can infinite loop. Finally, HandleImminentDataWipe now guarantees the final state will be either MergeFailed or None. For testing purposes, the old mechanism was too susceptible to state machinery changes. And for practical purposes, either we're going to wipe data (which removes the OTA), or a merge failed and we can't. So the effective outcome is always no update or a failed update. Bug: 179006671 Test: vts_libsnapshot_test Change-Id: Idcb30151e4d35cbeccf14369f09707ae94a57c66