Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOleg Besedin2008-04-24 16:02:10 +0000
committerOleg Besedin2008-04-24 16:02:10 +0000
commit5fb3173a1eb82970d2174e875be0765edf07a2d6 (patch)
tree848659ebcff9178b26c1698ea74dfdd46ef16d17 /bundles/org.eclipse.equinox.security
parent8868360d344bd0dbb2101a824ec78a3c80601cad (diff)
downloadrt.equinox.bundles-5fb3173a1eb82970d2174e875be0765edf07a2d6.tar.gz
rt.equinox.bundles-5fb3173a1eb82970d2174e875be0765edf07a2d6.tar.xz
rt.equinox.bundles-5fb3173a1eb82970d2174e875be0765edf07a2d6.zip
Bug 228060 Initialization dialog is modal
Diffstat (limited to 'bundles/org.eclipse.equinox.security')
-rw-r--r--bundles/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/storage/JavaEncryption.java39
-rw-r--r--bundles/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/storage/friends/IUICallbacks.java6
2 files changed, 28 insertions, 17 deletions
diff --git a/bundles/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/storage/JavaEncryption.java b/bundles/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/storage/JavaEncryption.java
index da6120ca6..fa485f2a8 100644
--- a/bundles/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/storage/JavaEncryption.java
+++ b/bundles/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/storage/JavaEncryption.java
@@ -16,6 +16,8 @@ import java.util.*;
import javax.crypto.*;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
+import org.eclipse.core.runtime.jobs.ILock;
+import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.core.runtime.preferences.ConfigurationScope;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.equinox.internal.security.auth.AuthPlugin;
@@ -39,6 +41,8 @@ public class JavaEncryption {
private final static String sampleText = "sample text for roundtrip testing"; //$NON-NLS-1$
private final static PasswordExt samplePassword = new PasswordExt(new PBEKeySpec("password1".toCharArray()), "abc"); //$NON-NLS-1$ //$NON-NLS-2$
+ static private ILock lock = Job.getJobManager().newLock();
+
static private final int SALT_ITERATIONS = 10;
private String keyFactoryAlgorithm = null;
@@ -60,27 +64,36 @@ public class JavaEncryption {
return cipherAlgorithm;
}
- synchronized public void setAlgorithms(String cipherAlgorithm, String keyFactoryAlgorithm) {
- this.cipherAlgorithm = cipherAlgorithm;
- this.keyFactoryAlgorithm = keyFactoryAlgorithm;
+ public void setAlgorithms(String cipherAlgorithm, String keyFactoryAlgorithm) {
+ try {
+ lock.acquire(); // avoid conflict with init()
+ this.cipherAlgorithm = cipherAlgorithm;
+ this.keyFactoryAlgorithm = keyFactoryAlgorithm;
+ } finally {
+ lock.release();
+ }
}
- synchronized private void init() throws StorageException {
+ private void init() throws StorageException {
if (initialized)
return;
initialized = true;
- IUICallbacks callback = CallbacksProvider.getDefault().getCallback();
- if (callback == null)
- internalInitialize();
-
- IStorageTask task = new IStorageTask() {
- public void execute() throws StorageException {
+ try {
+ lock.acquire(); // avoid multiple simultaneous initializations
+ IUICallbacks callback = CallbacksProvider.getDefault().getCallback();
+ if (callback == null)
internalInitialize();
+ else {
+ callback.execute(new IStorageTask() {
+ public void execute() throws StorageException {
+ internalInitialize();
+ }
+ });
}
- };
- if (!callback.execute(task))
- throw new StorageException(StorageException.INTERNAL_ERROR, SecAuthMessages.initCancelled);
+ } finally {
+ lock.release();
+ }
}
protected void internalInitialize() throws StorageException {
diff --git a/bundles/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/storage/friends/IUICallbacks.java b/bundles/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/storage/friends/IUICallbacks.java
index edbe6114b..b9885f3fa 100644
--- a/bundles/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/storage/friends/IUICallbacks.java
+++ b/bundles/org.eclipse.equinox.security/src/org/eclipse/equinox/internal/security/storage/friends/IUICallbacks.java
@@ -40,11 +40,9 @@ public interface IUICallbacks {
public Boolean ask(final String msg);
/**
- * @param callback
- * @return false if task was canceled
- * @throws StorageException
+ * Runs a long-running task.
*/
- public boolean execute(final IStorageTask callback) throws StorageException;
+ public void execute(final IStorageTask callback) throws StorageException;
/**
* @return true if running with UI; false if headless

Back to the top