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

Commit 1d6024d2 authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi
Browse files

Track crashing during migration to avoid crash loop.

Bug: 16213554
Bug: 16235703
Change-Id: Ib29b1a84b4c6ebae06d3dc6448f3c274ec6a7aab
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