Synchronize access to listeners in ConversationCursor
* Apparently, these methods are being used from multiple threads,
which can cause a ConcurrentModificationException
Change-Id: I6f60f48570fd145c883cf9314f2d04293894c2d3
diff --git a/src/com/android/mail/browse/ConversationCursor.java b/src/com/android/mail/browse/ConversationCursor.java
index f106c97..e1c3f9c 100644
--- a/src/com/android/mail/browse/ConversationCursor.java
+++ b/src/com/android/mail/browse/ConversationCursor.java
@@ -228,14 +228,18 @@
* Add a listener for this cursor; we'll notify it when our data changes
*/
public void addListener(ConversationListener listener) {
- sListeners.add(listener);
+ synchronized (sListeners) {
+ sListeners.add(listener);
+ }
}
/**
* Remove a listener for this cursor
*/
public void removeListener(ConversationListener listener) {
- sListeners.remove(listener);
+ synchronized(sListeners) {
+ sListeners.remove(listener);
+ }
}
/**
@@ -346,8 +350,10 @@
if (DEBUG) {
Log.d(TAG, "[Notify: onRefreshRequired()]");
}
- for (ConversationListener listener: sListeners) {
- listener.onRefreshRequired();
+ synchronized(sListeners) {
+ for (ConversationListener listener: sListeners) {
+ listener.onRefreshRequired();
+ }
}
sRefreshRequired = true;
}
@@ -487,8 +493,10 @@
if (DEBUG) {
Log.d(TAG, "[Notify: onRefreshReady()]");
}
- for (ConversationListener listener: sListeners) {
- listener.onRefreshReady();
+ synchronized (sListeners) {
+ for (ConversationListener listener : sListeners) {
+ listener.onRefreshReady();
+ }
}
sRefreshReady = true;
}});