Merge "Remove deleted pdu items from the updated cache"
diff --git a/core/java/com/google/android/mms/pdu/PduPersister.java b/core/java/com/google/android/mms/pdu/PduPersister.java
index 7037b61..b04f890 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 @@
         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 @@
             // 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 @@
             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 @@
             // 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 87cb48e..de83124 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 @@
     }
 
     private PduCacheEntry purgeSingleEntry(Uri key) {
+        mUpdating.remove(key);
         PduCacheEntry entry = super.purge(key);
         if (entry != null) {
             removeFromThreads(key, entry);
@@ -176,6 +177,7 @@
 
         mMessageBoxes.clear();
         mThreads.clear();
+        mUpdating.clear();
     }
 
     /**
@@ -216,6 +218,7 @@
             HashSet<Uri> 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 @@
         HashSet<Uri> 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);