bug 74624
diff --git a/update/org.eclipse.update.core/src/org/eclipse/update/core/Feature.java b/update/org.eclipse.update.core/src/org/eclipse/update/core/Feature.java
index c4114a3..cb559ae 100644
--- a/update/org.eclipse.update.core/src/org/eclipse/update/core/Feature.java
+++ b/update/org.eclipse.update.core/src/org/eclipse/update/core/Feature.java
@@ -287,6 +287,7 @@
IFeatureReference alreadyInstalledFeature = null;
IFeatureContentConsumer consumer = null;
IPluginEntry[] targetSitePluginEntries = null;
+ ArrayList justInstalledPlugins = new ArrayList();
try {
// determine list of plugins to install
@@ -436,9 +437,12 @@
pluginConsumer.store(references[j], subMonitor);
}
- InstallRegistry.registerPlugin(pluginsToInstall[i]);
if (monitor.isCanceled())
abort();
+ else {
+ justInstalledPlugins.add(pluginsToInstall[i]);
+ InstallRegistry.registerPlugin(pluginsToInstall[i]);
+ }
}
// check if we need to install feature files [16718]
@@ -460,13 +464,17 @@
msg + " " + references[i].getIdentifier()); //$NON-NLS-1$
consumer.store(references[i], subMonitor);
}
- InstallRegistry.registerFeature(this);
- } else {
- monitor.worked(1);
- }
- if (monitor.isCanceled())
- abort();
+ if (monitor.isCanceled())
+ abort();
+ else
+ InstallRegistry.registerFeature(this);
+ } else {
+ if (monitor.isCanceled())
+ abort();
+ else
+ monitor.worked(1);
+ }
// call handler to complete installation (eg. handle non-plugin entries)
handler.completeInstall(consumer);
@@ -497,6 +505,9 @@
// close the log
recoveryLog.close(ErrorRecoveryLog.END_INSTALL_LOG);
} else {
+ // unregister the just installed plugins
+ for (int i=0; i<justInstalledPlugins.size(); i++)
+ InstallRegistry.unregisterPlugin(((IPluginEntry)justInstalledPlugins.get(i)));
consumer.abort();
}
}