diff options
author | android-build-prod (mdb) <android-build-team-robot@google.com> | 2020-11-10 01:27:28 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2020-11-10 01:27:28 +0000 |
commit | 317ab11e728914a6158cfe1d01e0c5bb86ab8203 (patch) | |
tree | 2d59374b54c997a981d46d1d05edb2481773daf6 | |
parent | af50649b476fa223e1ea645131fdfcd1df0a2f83 (diff) | |
parent | 4c1f081caecb3ae492e3bfb61b725983c554dd75 (diff) | |
download | qemu-snap-temp-L19100000739721321.tar.gz |
Merge "Revert snapshot code path." into snap-temp-L19100000739721321snap-temp-L19100000739721321
-rw-r--r-- | android/android-emu/android/snapshot/Snapshot.cpp | 79 |
1 files changed, 78 insertions, 1 deletions
diff --git a/android/android-emu/android/snapshot/Snapshot.cpp b/android/android-emu/android/snapshot/Snapshot.cpp index 377fa23c77..ff6e9cadda 100644 --- a/android/android-emu/android/snapshot/Snapshot.cpp +++ b/android/android-emu/android/snapshot/Snapshot.cpp @@ -732,7 +732,7 @@ const bool Snapshot::checkOfflineValid(bool writeFailure) { } const bool Snapshot::checkValid(bool writeFailure) { - if (!checkOfflineValid(writeFailure)) { + if (!preload()) { return false; } @@ -750,6 +750,83 @@ const bool Snapshot::checkValid(bool writeFailure) { return false; } + if (mSnapshotPb.images_size() > int(ARRAY_SIZE(kImages))) { + if (writeFailure) + saveFailure(FailureReason::ConfigMismatchAvd); + return false; + } + + int matchedImages = 0; + for (const auto& image : kImages) { + ScopedCPtr<char> path(image.pathGetter(android_avdInfo)); + const auto type = image.type; + const auto it = std::find_if( + mSnapshotPb.images().begin(), mSnapshotPb.images().end(), + [type](const pb::Image& im) { + return im.has_type() && im.type() == type; + }); + if (it != mSnapshotPb.images().end()) { + if (!verifyImageInfo(image.type, path.get(), *it)) { + // If in build env, nuke the qcow2 as well. + if (avdInfo_inAndroidBuild(android_avdInfo)) { + std::string qcow2Path(path.get()); + qcow2Path += ".qcow2"; + path_delete_file(qcow2Path.c_str()); + } + + if (writeFailure) + saveFailure(FailureReason::SystemImageChanged); + return false; + } + ++matchedImages; + } else { + // Should match an empty image info + if (!verifyImageInfo(image.type, path.get(), pb::Image())) { + // If in build env, nuke the qcow2 as well. + if (avdInfo_inAndroidBuild(android_avdInfo)) { + std::string qcow2Path(path.get()); + qcow2Path += ".qcow2"; + path_delete_file(qcow2Path.c_str()); + } + + if (writeFailure) + saveFailure(FailureReason::NoSnapshotInImage); + return false; + } + } + } + if (matchedImages != mSnapshotPb.images_size()) { + if (writeFailure) + saveFailure(FailureReason::ConfigMismatchAvd); + return false; + } + + IniFile expectedConfig(PathUtils::join(mDataDir, "hardware.ini")); + if (!expectedConfig.read(false)) { + if (writeFailure) + saveFailure(FailureReason::CorruptedData); + return false; + } + IniFile actualConfig(avdInfo_getCoreHwIniPath(android_avdInfo)); + if (!actualConfig.read(false)) { + if (writeFailure) + saveFailure(FailureReason::InternalError); + return false; + } + IniFile expectedStripped; + androidHwConfig_stripDefaults( + reinterpret_cast<CIniFile*>(&expectedConfig), + reinterpret_cast<CIniFile*>(&expectedStripped)); + IniFile actualStripped; + androidHwConfig_stripDefaults(reinterpret_cast<CIniFile*>(&actualConfig), + reinterpret_cast<CIniFile*>(&actualStripped)); + if (!areHwConfigsEqual(expectedStripped, actualStripped)) { + fprintf(stderr, "%s: hw configs not eq\n", __func__); + if (writeFailure) + saveFailure(FailureReason::ConfigMismatchAvd); + return false; + } + if (mSnapshotPb.has_invalid_loads()) { mInvalidLoads = mSnapshotPb.invalid_loads(); } else { |