Make ExternalPermutationWorker bind sockets lazily.
Change-Id: I257681a903cba1dd77b41efd4343b10dcf527ffb
diff --git a/dev/core/src/com/google/gwt/dev/ExternalPermutationWorkerFactory.java b/dev/core/src/com/google/gwt/dev/ExternalPermutationWorkerFactory.java
index d221129..b6d4573 100644
--- a/dev/core/src/com/google/gwt/dev/ExternalPermutationWorkerFactory.java
+++ b/dev/core/src/com/google/gwt/dev/ExternalPermutationWorkerFactory.java
@@ -347,11 +347,12 @@
}
}
- private ServerSocket sock;
+ private ServerSocket sock = null;
@Override
public Collection<PermutationWorker> getWorkers(TreeLogger logger,
UnifiedAst unifiedAst, int numWorkers) throws UnableToCompleteException {
+ ensureSocket(logger);
File astFile;
try {
astFile = File.createTempFile("externalPermutationWorkerFactory", ".ser");
@@ -379,7 +380,14 @@
}
@Override
- public void init(TreeLogger logger) throws UnableToCompleteException {
+ public boolean isLocal() {
+ return true;
+ }
+
+ private synchronized void ensureSocket(TreeLogger logger) throws UnableToCompleteException {
+ if (sock != null) {
+ return;
+ }
try {
sock = new ServerSocket();
/*
@@ -397,9 +405,4 @@
throw new UnableToCompleteException();
}
}
-
- @Override
- public boolean isLocal() {
- return true;
- }
}
diff --git a/dev/core/src/com/google/gwt/dev/PermutationWorkerFactory.java b/dev/core/src/com/google/gwt/dev/PermutationWorkerFactory.java
index 5246fab..37475ec 100644
--- a/dev/core/src/com/google/gwt/dev/PermutationWorkerFactory.java
+++ b/dev/core/src/com/google/gwt/dev/PermutationWorkerFactory.java
@@ -297,7 +297,6 @@
Class<? extends PermutationWorkerFactory> clazz = Class.forName(
className).asSubclass(PermutationWorkerFactory.class);
PermutationWorkerFactory factory = clazz.newInstance();
- factory.init(logger);
mutableFactories.add(factory);
if (logger.isLoggable(TreeLogger.SPAM)) {
logger.log(TreeLogger.SPAM, "Added PermutationWorkerFactory "
@@ -377,11 +376,6 @@
UnifiedAst unifiedAst, int numWorkers) throws UnableToCompleteException;
/**
- * Initialize the PermutationWorkerFactory.
- */
- public abstract void init(TreeLogger logger) throws UnableToCompleteException;
-
- /**
* Indicates if the PermutationWorkers created by the factory consume
* computational or memory resources on the local system, as opposed to the
* per-permutation work being performed on a remote system.
diff --git a/dev/core/src/com/google/gwt/dev/ThreadedPermutationWorkerFactory.java b/dev/core/src/com/google/gwt/dev/ThreadedPermutationWorkerFactory.java
index 673be66..be4f28f 100644
--- a/dev/core/src/com/google/gwt/dev/ThreadedPermutationWorkerFactory.java
+++ b/dev/core/src/com/google/gwt/dev/ThreadedPermutationWorkerFactory.java
@@ -100,11 +100,6 @@
}
@Override
- public void init(TreeLogger logger) throws UnableToCompleteException {
- logger.log(TreeLogger.SPAM, "Initializing ThreadedPermutationWorkerFactory");
- }
-
- @Override
public boolean isLocal() {
return true;
}