diff --git a/core/java/com/google/android/mms/pdu/PduPersister.java b/core/java/com/google/android/mms/pdu/PduPersister.java index 7037b6128c295..b04f8908515ea 100644 --- a/core/java/com/google/android/mms/pdu/PduPersister.java +++ b/core/java/com/google/android/mms/pdu/PduPersister.java @@ -513,6 +513,9 @@ public class PduPersister { PduCacheEntry cacheEntry; synchronized(PDU_CACHE_INSTANCE) { if (PDU_CACHE_INSTANCE.isUpdating(uri)) { + if (LOCAL_LOGV) { + Log.v(TAG, "load: " + uri + " blocked by isUpdating()"); + } try { PDU_CACHE_INSTANCE.wait(); } catch (InterruptedException e) { @@ -840,6 +843,9 @@ public class PduPersister { // If the cache item is getting updated, wait until it's done updating before // purging it. if (PDU_CACHE_INSTANCE.isUpdating(uri)) { + if (LOCAL_LOGV) { + Log.v(TAG, "updateHeaders: " + uri + " blocked by isUpdating()"); + } try { PDU_CACHE_INSTANCE.wait(); } catch (InterruptedException e) { @@ -1002,6 +1008,9 @@ public class PduPersister { PduCacheEntry cacheEntry; synchronized(PDU_CACHE_INSTANCE) { if (PDU_CACHE_INSTANCE.isUpdating(uri)) { + if (LOCAL_LOGV) { + Log.v(TAG, "updateParts: " + uri + " blocked by isUpdating()"); + } try { PDU_CACHE_INSTANCE.wait(); } catch (InterruptedException e) { @@ -1097,6 +1106,9 @@ public class PduPersister { // If the cache item is getting updated, wait until it's done updating before // purging it. if (PDU_CACHE_INSTANCE.isUpdating(uri)) { + if (LOCAL_LOGV) { + Log.v(TAG, "persist: " + uri + " blocked by isUpdating()"); + } try { PDU_CACHE_INSTANCE.wait(); } catch (InterruptedException e) { diff --git a/core/java/com/google/android/mms/util/PduCache.java b/core/java/com/google/android/mms/util/PduCache.java index 87cb48e53370c..de83124bad7b9 100644 --- a/core/java/com/google/android/mms/util/PduCache.java +++ b/core/java/com/google/android/mms/util/PduCache.java @@ -161,6 +161,7 @@ public final class PduCache extends AbstractCache { } private PduCacheEntry purgeSingleEntry(Uri key) { + mUpdating.remove(key); PduCacheEntry entry = super.purge(key); if (entry != null) { removeFromThreads(key, entry); @@ -176,6 +177,7 @@ public final class PduCache extends AbstractCache { mMessageBoxes.clear(); mThreads.clear(); + mUpdating.clear(); } /** @@ -216,6 +218,7 @@ public final class PduCache extends AbstractCache { HashSet msgBox = mMessageBoxes.remove(msgBoxId); if (msgBox != null) { for (Uri key : msgBox) { + mUpdating.remove(key); PduCacheEntry entry = super.purge(key); if (entry != null) { removeFromThreads(key, entry); @@ -240,6 +243,7 @@ public final class PduCache extends AbstractCache { HashSet thread = mThreads.remove(threadId); if (thread != null) { for (Uri key : thread) { + mUpdating.remove(key); PduCacheEntry entry = super.purge(key); if (entry != null) { removeFromMessageBoxes(key, entry);