CB-8031 Fix race condition that shows as ConcurrentModificationException

This commit is contained in:
Andrew Grieve 2014-11-17 22:11:21 -08:00
parent ac284fd39c
commit 1feaa7fed7

View File

@ -110,8 +110,12 @@ public class PluginManager {
@Deprecated // Should not be exposed as public.
public void startupPlugins() {
for (PluginEntry entry : entryMap.values()) {
// Add a null entry to for each non-startup plugin to avoid ConcurrentModificationException
// When iterating plugins.
if (entry.onload) {
getPlugin(entry.service);
} else {
pluginMap.put(entry.service, null);
}
}
}
@ -232,7 +236,9 @@ public class PluginManager {
*/
public void onPause(boolean multitasking) {
for (CordovaPlugin plugin : this.pluginMap.values()) {
plugin.onPause(multitasking);
if (plugin != null) {
plugin.onPause(multitasking);
}
}
}
@ -243,7 +249,9 @@ public class PluginManager {
*/
public void onResume(boolean multitasking) {
for (CordovaPlugin plugin : this.pluginMap.values()) {
plugin.onResume(multitasking);
if (plugin != null) {
plugin.onResume(multitasking);
}
}
}
@ -252,7 +260,9 @@ public class PluginManager {
*/
public void onDestroy() {
for (CordovaPlugin plugin : this.pluginMap.values()) {
plugin.onDestroy();
if (plugin != null) {
plugin.onDestroy();
}
}
}
@ -269,9 +279,11 @@ public class PluginManager {
return obj;
}
for (CordovaPlugin plugin : this.pluginMap.values()) {
obj = plugin.onMessage(id, data);
if (obj != null) {
return obj;
if (plugin != null) {
obj = plugin.onMessage(id, data);
if (obj != null) {
return obj;
}
}
}
return null;
@ -282,7 +294,9 @@ public class PluginManager {
*/
public void onNewIntent(Intent intent) {
for (CordovaPlugin plugin : this.pluginMap.values()) {
plugin.onNewIntent(intent);
if (plugin != null) {
plugin.onNewIntent(intent);
}
}
}
@ -320,15 +334,19 @@ public class PluginManager {
*/
public void onReset() {
for (CordovaPlugin plugin : this.pluginMap.values()) {
plugin.onReset();
if (plugin != null) {
plugin.onReset();
}
}
}
Uri remapUri(Uri uri) {
for (CordovaPlugin plugin : this.pluginMap.values()) {
Uri ret = plugin.remapUri(uri);
if (ret != null) {
return ret;
if (plugin != null) {
Uri ret = plugin.remapUri(uri);
if (ret != null) {
return ret;
}
}
}
return null;