Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 05c70484 authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi Committed by Ken Wakasa
Browse files

Track crashing during migration to avoid crash loop. DO NOT MERGE.

Bug: 16213554
Bug: 16235703
Change-Id: Ib29b1a84b4c6ebae06d3dc6448f3c274ec6a7aab
(cherry picked from commit 1d6024d2)
parent a2087e66
Loading
Loading
Loading
Loading
+29 −11
Original line number Diff line number Diff line
@@ -80,6 +80,7 @@ public final class BinaryDictionary extends Dictionary {
    public static final int FORMAT_WORD_PROPERTY_COUNT_INDEX = 3;

    public static final String DICT_FILE_NAME_SUFFIX_FOR_MIGRATION = ".migrate";
    public static final String DIR_NAME_SUFFIX_FOR_RECORD_MIGRATION = ".migrating";

    private long mNativeDict;
    private final Locale mLocale;
@@ -559,6 +560,20 @@ public final class BinaryDictionary extends Dictionary {
        if (!isValidDictionary()) {
            return false;
        }
        final File isMigratingDir =
                new File(mDictFilePath + DIR_NAME_SUFFIX_FOR_RECORD_MIGRATION);
        if (isMigratingDir.exists()) {
            isMigratingDir.delete();
            Log.e(TAG, "Previous migration attempt failed probably due to a crash. "
                        + "Giving up using the old dictionary (" + mDictFilePath + ").");
            return false;
        }
        if (!isMigratingDir.mkdir()) {
            Log.e(TAG, "Cannot create a dir (" + isMigratingDir.getAbsolutePath()
                    + ") to record migration.");
            return false;
        }
        try {
            final String tmpDictFilePath = mDictFilePath + DICT_FILE_NAME_SUFFIX_FOR_MIGRATION;
            if (!migrateNative(mNativeDict, tmpDictFilePath, newFormatVersion)) {
                return false;
@@ -575,6 +590,9 @@ public final class BinaryDictionary extends Dictionary {
            loadDictionary(dictFile.getAbsolutePath(), 0 /* startOffset */,
                    dictFile.length(), mIsUpdatable);
            return true;
        } finally {
            isMigratingDir.delete();
        }
    }

    @UsedForTesting