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

Commit e72c4e5f authored by Yuichiro Hanada's avatar Yuichiro Hanada
Browse files

Remove a static buffer for thread safety.

Change-Id: I335c35eb182ff63abb8a5b04c053a98d44b7c6ce
parent 47bac6eb
Loading
Loading
Loading
Loading
+4 −12
Original line number Diff line number Diff line
@@ -457,16 +457,13 @@ public final class BinaryDictDecoder {
        return result;
    }

    // TODO: static!? This will behave erratically when used in multi-threaded code.
    // We need to fix this
    private static int[] sGetWordBuffer = new int[FormatSpec.MAX_WORD_LENGTH];
    @SuppressWarnings("unused")
    private static WeightedString getWordAtAddressWithParentAddress(
            final FusionDictionaryBufferInterface buffer, final int headerSize, final int address,
            final FormatOptions options) {
        int currentAddress = address;
        int index = FormatSpec.MAX_WORD_LENGTH - 1;
        int frequency = Integer.MIN_VALUE;
        final StringBuilder builder = new StringBuilder();
        // the length of the path from the root to the leaf is limited by MAX_WORD_LENGTH
        for (int count = 0; count < FormatSpec.MAX_WORD_LENGTH; ++count) {
            CharGroupInfo currentInfo;
@@ -482,17 +479,12 @@ public final class BinaryDictDecoder {
                }
            } while (BinaryDictIOUtils.isMovedGroup(currentInfo.mFlags, options));
            if (Integer.MIN_VALUE == frequency) frequency = currentInfo.mFrequency;
            for (int i = 0; i < currentInfo.mCharacters.length; ++i) {
                sGetWordBuffer[index--] =
                        currentInfo.mCharacters[currentInfo.mCharacters.length - i - 1];
            }
            builder.insert(0,
                    new String(currentInfo.mCharacters, 0, currentInfo.mCharacters.length));
            if (currentInfo.mParentAddress == FormatSpec.NO_PARENT_ADDRESS) break;
            currentAddress = currentInfo.mParentAddress + currentInfo.mOriginalAddress;
        }

        return new WeightedString(
                new String(sGetWordBuffer, index + 1, FormatSpec.MAX_WORD_LENGTH - index - 1),
                        frequency);
        return new WeightedString(builder.toString(), frequency);
    }

    private static WeightedString getWordAtAddressWithoutParentAddress(