From 2dc6c7fa48d749773e5ccbc98633d7cf9d35e7ac Mon Sep 17 00:00:00 2001 From: Tom Taylor Date: Mon, 27 Feb 2012 16:05:07 -0800 Subject: [PATCH] Remove deleted pdu items from the updated cache When pdu's are removed from the PduCache, make sure we remove them from the list of pdu's currently being updated as well. Change-Id: I45dde4a09d74019a344fca31e3926b1ece6c393d --- .../com/google/android/mms/pdu/PduPersister.java | 12 ++++++++++++ core/java/com/google/android/mms/util/PduCache.java | 4 ++++ 2 files changed, 16 insertions(+) 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);