diff options
author | 2013-09-09 12:13:21 +0900 | |
---|---|---|
committer | 2013-09-09 12:13:21 +0900 | |
commit | 773f2272421738b400c5eb24b36d36b9d3b29207 (patch) | |
tree | 69c943ea0754ead4f2a841e3a3121c87d0b3165e /java/src | |
parent | e7ac90034080b952aa41ade15a533bdf13d9090d (diff) | |
download | latinime-773f2272421738b400c5eb24b36d36b9d3b29207.tar.gz latinime-773f2272421738b400c5eb24b36d36b9d3b29207.tar.xz latinime-773f2272421738b400c5eb24b36d36b9d3b29207.zip |
Fix: wrong locking order.
Change-Id: I823912e3979829ad1e825cf91dc5e18f7f0f9cc3
Diffstat (limited to 'java/src')
-rw-r--r-- | java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java index b92283c5b..e62a35af3 100644 --- a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java +++ b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java @@ -84,9 +84,11 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { /** Whether to support dynamically updating the dictionary */ private final boolean mIsUpdatable; + // TODO: remove, once dynamic operations will be serialized /** Controls access to the shared binary dictionary file across multiple instances. */ private final DictionaryController mSharedDictionaryController; + // TODO: remove, once dynamic operations will be serialized /** Controls access to the local binary dictionary for this instance. */ private final DictionaryController mLocalDictionaryController = new DictionaryController(); @@ -446,9 +448,9 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { private final void syncReloadDictionaryInternal() { // Ensure that only one thread attempts to read or write to the shared binary dictionary // file at the same time. - mLocalDictionaryController.writeLock().lock(); + mSharedDictionaryController.writeLock().lock(); try { - mSharedDictionaryController.writeLock().lock(); + mLocalDictionaryController.writeLock().lock(); try { final long time = SystemClock.uptimeMillis(); final boolean dictionaryFileExists = dictionaryFileExists(); @@ -483,10 +485,10 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { } mLocalDictionaryController.mLastUpdateTime = time; } finally { - mSharedDictionaryController.writeLock().unlock(); + mLocalDictionaryController.writeLock().unlock(); } } finally { - mLocalDictionaryController.writeLock().unlock(); + mSharedDictionaryController.writeLock().unlock(); } } @@ -519,16 +521,16 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { private class AsyncLoadDictionaryToMemoryTask extends Thread { @Override public void run() { - mLocalDictionaryController.writeLock().lock(); + mSharedDictionaryController.readLock().lock(); try { - mSharedDictionaryController.readLock().lock(); + mLocalDictionaryController.writeLock().lock(); try { loadDictionaryAsync(); } finally { - mSharedDictionaryController.readLock().unlock(); + mLocalDictionaryController.writeLock().unlock(); } } finally { - mLocalDictionaryController.writeLock().unlock(); + mSharedDictionaryController.readLock().unlock(); } } } |