8048146: sjavac uses unexpected exit code of -1
Changed exit codes for sjavac Reviewed-by: jlahoda
This commit is contained in:
parent
c6e7003173
commit
e85033c628
langtools
src/jdk.compiler/share/classes/com/sun/tools/sjavac
test/tools/sjavac
@ -26,8 +26,6 @@
|
||||
package com.sun.tools.sjavac;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
import java.net.URI;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
@ -42,9 +40,8 @@ import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import com.sun.tools.javac.main.Main.Result;
|
||||
import com.sun.tools.sjavac.comp.CompilationService;
|
||||
import com.sun.tools.sjavac.options.Options;
|
||||
import com.sun.tools.sjavac.pubapi.PubApi;
|
||||
@ -283,7 +280,7 @@ public class CompileJavaPackages implements Transformer {
|
||||
}
|
||||
|
||||
// Check the return values.
|
||||
if (subResult.returnCode != 0) {
|
||||
if (subResult.result != Result.OK) {
|
||||
rc = false;
|
||||
}
|
||||
}
|
||||
|
@ -28,6 +28,8 @@ package com.sun.tools.sjavac.client;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.io.Writer;
|
||||
|
||||
import com.sun.tools.javac.main.Main;
|
||||
import com.sun.tools.javac.main.Main.Result;
|
||||
import com.sun.tools.sjavac.AutoFlushWriter;
|
||||
import com.sun.tools.sjavac.Log;
|
||||
import com.sun.tools.sjavac.Util;
|
||||
@ -58,7 +60,7 @@ public class ClientMain {
|
||||
options = Options.parseArgs(args);
|
||||
} catch (IllegalArgumentException e) {
|
||||
Log.error(e.getMessage());
|
||||
return -1;
|
||||
return Result.CMDERR.exitCode;
|
||||
}
|
||||
|
||||
Log.setLogLevel(options.getLogLevel());
|
||||
@ -73,13 +75,13 @@ public class ClientMain {
|
||||
Sjavac sjavac = useServer ? new SjavacClient(options) : new SjavacImpl();
|
||||
|
||||
// Perform compilation
|
||||
int rc = sjavac.compile(args);
|
||||
Result result = sjavac.compile(args);
|
||||
|
||||
// If sjavac is running in the foreground we should shut it down at this point
|
||||
if (!useServer) {
|
||||
sjavac.shutdown();
|
||||
}
|
||||
|
||||
return rc;
|
||||
return result.exitCode;
|
||||
}
|
||||
}
|
||||
|
@ -26,23 +26,20 @@
|
||||
package com.sun.tools.sjavac.client;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.io.PrintStream;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.Reader;
|
||||
import java.io.Writer;
|
||||
import java.net.InetAddress;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.Socket;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Scanner;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import com.sun.tools.javac.main.Main;
|
||||
import com.sun.tools.javac.main.Main.Result;
|
||||
import com.sun.tools.sjavac.Log;
|
||||
import com.sun.tools.sjavac.Util;
|
||||
import com.sun.tools.sjavac.options.OptionHelper;
|
||||
@ -116,8 +113,8 @@ public class SjavacClient implements Sjavac {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compile(String[] args) {
|
||||
int result = -1;
|
||||
public Result compile(String[] args) {
|
||||
Result result = null;
|
||||
try (Socket socket = tryConnect()) {
|
||||
PrintWriter out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
|
||||
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
|
||||
@ -150,22 +147,28 @@ public class SjavacClient implements Sjavac {
|
||||
}
|
||||
|
||||
if (type.equals(SjavacServer.LINE_TYPE_RC)) {
|
||||
result = Integer.parseInt(content);
|
||||
result = Main.Result.valueOf(content);
|
||||
}
|
||||
}
|
||||
} catch (PortFileInaccessibleException e) {
|
||||
Log.error("Port file inaccessible.");
|
||||
result = CompilationSubResult.ERROR_FATAL;
|
||||
result = Result.ERROR;
|
||||
} catch (IOException ioe) {
|
||||
Log.error("IOException caught during compilation: " + ioe.getMessage());
|
||||
Log.debug(ioe);
|
||||
result = CompilationSubResult.ERROR_FATAL;
|
||||
result = Result.ERROR;
|
||||
} catch (InterruptedException ie) {
|
||||
Thread.currentThread().interrupt(); // Restore interrupt
|
||||
Log.error("Compilation interrupted.");
|
||||
Log.debug(ie);
|
||||
result = CompilationSubResult.ERROR_FATAL;
|
||||
result = Result.ERROR;
|
||||
}
|
||||
|
||||
if (result == null) {
|
||||
// No LINE_TYPE_RC was found.
|
||||
result = Result.ERROR;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -42,6 +42,8 @@ import javax.tools.ToolProvider;
|
||||
|
||||
import com.sun.tools.javac.api.JavacTaskImpl;
|
||||
import com.sun.tools.javac.api.JavacTool;
|
||||
import com.sun.tools.javac.main.Main;
|
||||
import com.sun.tools.javac.main.Main.Result;
|
||||
import com.sun.tools.javac.util.Context;
|
||||
import com.sun.tools.javac.util.Dependencies;
|
||||
import com.sun.tools.javac.util.ListBuffer;
|
||||
@ -80,7 +82,7 @@ public class CompilationService {
|
||||
Dependencies.GraphDependencies.preRegister(context);
|
||||
|
||||
// Now setup the actual compilation
|
||||
CompilationSubResult compilationResult = new CompilationSubResult(0);
|
||||
CompilationSubResult compilationResult = new CompilationSubResult(Result.OK);
|
||||
|
||||
// First deal with explicit source files on cmdline and in at file
|
||||
ListBuffer<JavaFileObject> explicitJFOs = new ListBuffer<>();
|
||||
@ -97,7 +99,7 @@ public class CompilationService {
|
||||
|
||||
// Create a log to capture compiler output
|
||||
StringWriter stderrLog = new StringWriter();
|
||||
com.sun.tools.javac.main.Main.Result rc = com.sun.tools.javac.main.Main.Result.OK;
|
||||
Result result;
|
||||
PublicApiCollector pubApiCollector = new PublicApiCollector(context, explicitJFOs);
|
||||
PathAndPackageVerifier papVerifier = new PathAndPackageVerifier();
|
||||
NewDependencyCollector depsCollector = new NewDependencyCollector(context, explicitJFOs);
|
||||
@ -120,20 +122,23 @@ public class CompilationService {
|
||||
task.addTaskListener(pubApiCollector);
|
||||
task.addTaskListener(papVerifier);
|
||||
logJavacInvocation(args);
|
||||
rc = task.doCall();
|
||||
Log.debug("javac returned with code " + rc);
|
||||
result = task.doCall();
|
||||
Log.debug("javac result: " + result);
|
||||
sfm.flush();
|
||||
} else {
|
||||
result = Result.ERROR;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.error(Util.getStackTrace(e));
|
||||
stderrLog.append(Util.getStackTrace(e));
|
||||
rc = com.sun.tools.javac.main.Main.Result.ERROR;
|
||||
result = Result.ERROR;
|
||||
}
|
||||
|
||||
compilationResult.packageArtifacts = sfm.getPackageArtifacts();
|
||||
|
||||
if (papVerifier.errorsDiscovered())
|
||||
rc = com.sun.tools.javac.main.Main.Result.ERROR;
|
||||
if (papVerifier.errorsDiscovered()) {
|
||||
result = Result.ERROR;
|
||||
}
|
||||
|
||||
compilationResult.packageDependencies = depsCollector.getDependencies(false);
|
||||
compilationResult.packageCpDependencies = depsCollector.getDependencies(true);
|
||||
@ -141,7 +146,7 @@ public class CompilationService {
|
||||
compilationResult.packagePubapis = pubApiCollector.getPubApis(true);
|
||||
compilationResult.dependencyPubapis = pubApiCollector.getPubApis(false);
|
||||
compilationResult.stderr = stderrLog.toString();
|
||||
compilationResult.returnCode = rc.exitCode;
|
||||
compilationResult.result = result;
|
||||
|
||||
return compilationResult;
|
||||
} catch (IOException e) {
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
package com.sun.tools.sjavac.comp;
|
||||
|
||||
import com.sun.tools.javac.main.Main.Result;
|
||||
import com.sun.tools.sjavac.Log;
|
||||
import com.sun.tools.sjavac.server.Sjavac;
|
||||
|
||||
@ -54,7 +55,7 @@ public class PooledSjavac implements Sjavac {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compile(String[] args) {
|
||||
public Result compile(String[] args) {
|
||||
Log log = Log.get();
|
||||
try {
|
||||
return pool.submit(() -> {
|
||||
|
@ -41,6 +41,7 @@ import java.util.stream.Stream;
|
||||
|
||||
import com.sun.tools.javac.file.JavacFileManager;
|
||||
import com.sun.tools.javac.main.Main;
|
||||
import com.sun.tools.javac.main.Main.Result;
|
||||
import com.sun.tools.javac.util.Context;
|
||||
import com.sun.tools.sjavac.JavacState;
|
||||
import com.sun.tools.sjavac.Log;
|
||||
@ -69,36 +70,36 @@ import javax.tools.JavaFileManager;
|
||||
public class SjavacImpl implements Sjavac {
|
||||
|
||||
@Override
|
||||
public int compile(String[] args) {
|
||||
public Result compile(String[] args) {
|
||||
Options options;
|
||||
try {
|
||||
options = Options.parseArgs(args);
|
||||
} catch (IllegalArgumentException e) {
|
||||
Log.error(e.getMessage());
|
||||
return RC_FATAL;
|
||||
return Result.CMDERR;
|
||||
}
|
||||
|
||||
if (!validateOptions(options))
|
||||
return RC_FATAL;
|
||||
return Result.CMDERR;
|
||||
|
||||
if (srcDstOverlap(options.getSources(), options.getDestDir())) {
|
||||
return RC_FATAL;
|
||||
return Result.CMDERR;
|
||||
}
|
||||
|
||||
if (!createIfMissing(options.getDestDir()))
|
||||
return RC_FATAL;
|
||||
return Result.ERROR;
|
||||
|
||||
Path stateDir = options.getStateDir();
|
||||
if (stateDir != null && !createIfMissing(options.getStateDir()))
|
||||
return RC_FATAL;
|
||||
return Result.ERROR;
|
||||
|
||||
Path gensrc = options.getGenSrcDir();
|
||||
if (gensrc != null && !createIfMissing(gensrc))
|
||||
return RC_FATAL;
|
||||
return Result.ERROR;
|
||||
|
||||
Path hdrdir = options.getHeaderDir();
|
||||
if (hdrdir != null && !createIfMissing(hdrdir))
|
||||
return RC_FATAL;
|
||||
return Result.ERROR;
|
||||
|
||||
if (stateDir == null) {
|
||||
// Prepare context. Direct logging to our byte array stream.
|
||||
@ -113,7 +114,7 @@ public class SjavacImpl implements Sjavac {
|
||||
.filter(arg -> !arg.startsWith(Option.SERVER.arg))
|
||||
.toArray(String[]::new);
|
||||
// Compile
|
||||
Main.Result result = new Main("javac", printWriter).compile(passThroughArgs, context);
|
||||
Result result = new Main("javac", printWriter).compile(passThroughArgs, context);
|
||||
|
||||
// Process compiler output (which is always errors)
|
||||
printWriter.flush();
|
||||
@ -128,7 +129,7 @@ public class SjavacImpl implements Sjavac {
|
||||
throw new UncheckedIOException(es);
|
||||
}
|
||||
}
|
||||
return result.exitCode;
|
||||
return result;
|
||||
|
||||
} else {
|
||||
// Load the prev build state database.
|
||||
@ -166,7 +167,7 @@ public class SjavacImpl implements Sjavac {
|
||||
|
||||
if (sources.isEmpty()) {
|
||||
Log.error("Found nothing to compile!");
|
||||
return RC_FATAL;
|
||||
return Result.ERROR;
|
||||
}
|
||||
|
||||
|
||||
@ -292,15 +293,15 @@ public class SjavacImpl implements Sjavac {
|
||||
javac_state.removeSuperfluousArtifacts(recently_compiled);
|
||||
}
|
||||
|
||||
return rc[0] ? RC_OK : RC_FATAL;
|
||||
return rc[0] ? Result.OK : Result.ERROR;
|
||||
} catch (ProblemException e) {
|
||||
// For instance make file list mismatch.
|
||||
Log.error(e.getMessage());
|
||||
Log.debug(e);
|
||||
return RC_FATAL;
|
||||
return Result.ERROR;
|
||||
} catch (Exception e) {
|
||||
Log.error(e);
|
||||
return RC_FATAL;
|
||||
return Result.ERROR;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -31,6 +31,7 @@ import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import com.sun.tools.javac.main.Main.Result;
|
||||
import com.sun.tools.sjavac.pubapi.PubApi;
|
||||
|
||||
/**
|
||||
@ -44,10 +45,7 @@ public class CompilationSubResult implements Serializable {
|
||||
|
||||
static final long serialVersionUID = 46739181113L;
|
||||
|
||||
// Return code constants
|
||||
public final static int ERROR_FATAL = -1;
|
||||
|
||||
public int returnCode;
|
||||
public Result result;
|
||||
public Map<String, Set<URI>> packageArtifacts = new HashMap<>();
|
||||
public Map<String, Map<String, Set<String>>> packageDependencies = new HashMap<>();
|
||||
public Map<String, Map<String, Set<String>>> packageCpDependencies = new HashMap<>();
|
||||
@ -56,11 +54,11 @@ public class CompilationSubResult implements Serializable {
|
||||
public String stdout = "";
|
||||
public String stderr = "";
|
||||
|
||||
public CompilationSubResult(int returnCode) {
|
||||
this.returnCode = returnCode;
|
||||
public CompilationSubResult(Result result) {
|
||||
this.result = result;
|
||||
}
|
||||
|
||||
public void setReturnCode(int returnCode) {
|
||||
this.returnCode = returnCode;
|
||||
public void setResult(Result result) {
|
||||
this.result = result;
|
||||
}
|
||||
}
|
||||
|
@ -25,11 +25,9 @@
|
||||
|
||||
package com.sun.tools.sjavac.server;
|
||||
|
||||
import com.sun.tools.javac.main.Main.Result;
|
||||
import com.sun.tools.sjavac.Log;
|
||||
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
|
||||
@ -66,7 +64,7 @@ public class IdleResetSjavac implements Sjavac {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compile(String[] args) {
|
||||
public Result compile(String[] args) {
|
||||
startCall();
|
||||
try {
|
||||
return delegate.compile(args);
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
package com.sun.tools.sjavac.server;
|
||||
|
||||
import com.sun.tools.javac.main.Main;
|
||||
import com.sun.tools.sjavac.Log;
|
||||
import com.sun.tools.sjavac.Util;
|
||||
|
||||
@ -100,10 +101,10 @@ public class RequestHandler extends Thread {
|
||||
checkInternalErrorLog();
|
||||
|
||||
// Perform compilation
|
||||
int rc = sjavac.compile(args);
|
||||
Main.Result rc = sjavac.compile(args);
|
||||
|
||||
// Send return code back to client
|
||||
out.println(LINE_TYPE_RC + ":" + rc);
|
||||
out.println(LINE_TYPE_RC + ":" + rc.name());
|
||||
|
||||
// Check for internal errors again.
|
||||
checkInternalErrorLog();
|
||||
|
@ -32,6 +32,8 @@ import java.io.IOException;
|
||||
import java.io.PrintStream;
|
||||
import java.lang.Thread.UncaughtExceptionHandler;
|
||||
|
||||
import com.sun.tools.javac.main.Main;
|
||||
import com.sun.tools.javac.main.Main.Result;
|
||||
import com.sun.tools.sjavac.Log;
|
||||
import com.sun.tools.sjavac.Log.Level;
|
||||
import com.sun.tools.sjavac.server.log.LazyInitFileLog;
|
||||
@ -75,7 +77,7 @@ public class ServerMain {
|
||||
// Any options other than --startserver?
|
||||
if (args.length > 1) {
|
||||
Log.error("When spawning a background server, only a single --startserver argument is allowed.");
|
||||
return 1;
|
||||
return Result.CMDERR.exitCode;
|
||||
}
|
||||
|
||||
int exitCode;
|
||||
@ -84,7 +86,7 @@ public class ServerMain {
|
||||
exitCode = server.startServer();
|
||||
} catch (IOException | InterruptedException ex) {
|
||||
ex.printStackTrace();
|
||||
exitCode = -1;
|
||||
exitCode = Result.ERROR.exitCode;
|
||||
}
|
||||
|
||||
return exitCode;
|
||||
|
@ -25,6 +25,8 @@
|
||||
|
||||
package com.sun.tools.sjavac.server;
|
||||
|
||||
import com.sun.tools.javac.main.Main.Result;
|
||||
|
||||
import java.io.Writer;
|
||||
|
||||
|
||||
@ -38,10 +40,6 @@ import java.io.Writer;
|
||||
* deletion without notice.</b>
|
||||
*/
|
||||
public interface Sjavac {
|
||||
|
||||
final static int RC_FATAL = -1;
|
||||
final static int RC_OK = 0;
|
||||
|
||||
int compile(String[] args);
|
||||
Result compile(String[] args);
|
||||
void shutdown();
|
||||
}
|
||||
|
@ -40,6 +40,8 @@ import java.util.Map;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
import com.sun.tools.javac.main.Main;
|
||||
import com.sun.tools.javac.main.Main.Result;
|
||||
import com.sun.tools.sjavac.Log;
|
||||
import com.sun.tools.sjavac.Util;
|
||||
import com.sun.tools.sjavac.client.PortFileInaccessibleException;
|
||||
@ -167,7 +169,7 @@ public class SjavacServer implements Terminable {
|
||||
if (portFile.containsPortInfo()) {
|
||||
Log.debug("Javac server not started because portfile exists!");
|
||||
portFile.unlock();
|
||||
return -1;
|
||||
return Result.ERROR.exitCode;
|
||||
}
|
||||
|
||||
// .-----------. .--------. .------.
|
||||
@ -221,7 +223,7 @@ public class SjavacServer implements Terminable {
|
||||
// Shut down
|
||||
sjavac.shutdown();
|
||||
|
||||
return 0;
|
||||
return Result.OK.exitCode;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -36,6 +36,7 @@
|
||||
* @run main Wrapper HiddenFiles
|
||||
*/
|
||||
|
||||
import com.sun.tools.javac.main.Main.Result;
|
||||
import com.sun.tools.javac.util.Assert;
|
||||
import com.sun.tools.sjavac.server.Sjavac;
|
||||
|
||||
@ -62,6 +63,6 @@ public class HiddenFiles extends SjavacBase {
|
||||
"-d", BIN.toString(),
|
||||
"--state-dir=" + STATE_DIR);
|
||||
|
||||
Assert.check(rc == Sjavac.RC_FATAL, "Compilation succeeded unexpectedly.");
|
||||
Assert.check(rc == Result.ERROR.exitCode, "Compilation succeeded unexpectedly.");
|
||||
}
|
||||
}
|
||||
|
@ -29,9 +29,9 @@
|
||||
* @build Wrapper
|
||||
* @run main Wrapper IdleShutdown
|
||||
*/
|
||||
import java.io.Writer;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
import com.sun.tools.javac.main.Main.Result;
|
||||
import com.sun.tools.sjavac.server.IdleResetSjavac;
|
||||
import com.sun.tools.sjavac.server.Sjavac;
|
||||
import com.sun.tools.sjavac.server.Terminable;
|
||||
@ -103,13 +103,13 @@ public class IdleShutdown {
|
||||
public void shutdown() {
|
||||
}
|
||||
@Override
|
||||
public int compile(String[] args) {
|
||||
public Result compile(String[] args) {
|
||||
// Attempt to trigger idle timeout during a call by sleeping
|
||||
try {
|
||||
Thread.sleep(TIMEOUT_MS + 1000);
|
||||
} catch (InterruptedException e) {
|
||||
}
|
||||
return 0;
|
||||
return Result.OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -33,6 +33,7 @@
|
||||
* @run main Wrapper IncludeExcludePatterns
|
||||
*/
|
||||
|
||||
import com.sun.tools.javac.main.Main.Result;
|
||||
import com.sun.tools.javac.util.Assert;
|
||||
import com.sun.tools.sjavac.server.Sjavac;
|
||||
|
||||
@ -131,7 +132,7 @@ public class IncludeExcludePatterns extends SjavacBase {
|
||||
int rc = compile((Object[]) args.split(" "));
|
||||
|
||||
// Compilation should always pass in these tests
|
||||
Assert.check(rc == Sjavac.RC_OK, "Compilation failed unexpectedly.");
|
||||
Assert.check(rc == Result.OK.exitCode, "Compilation failed unexpectedly.");
|
||||
|
||||
// The resulting .class files should correspond to the visible source files
|
||||
Set<Path> result = allFilesInDir(BIN);
|
||||
|
@ -30,12 +30,10 @@
|
||||
* @build Wrapper
|
||||
* @run main Wrapper PooledExecution
|
||||
*/
|
||||
import java.io.PrintWriter;
|
||||
import java.io.Writer;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import com.sun.tools.sjavac.Log;
|
||||
import com.sun.tools.javac.main.Main.Result;
|
||||
import com.sun.tools.sjavac.comp.PooledSjavac;
|
||||
import com.sun.tools.sjavac.server.Sjavac;
|
||||
|
||||
@ -111,7 +109,7 @@ public class PooledExecution {
|
||||
AtomicInteger activeRequests = new AtomicInteger(0);
|
||||
|
||||
@Override
|
||||
public int compile(String[] args) {
|
||||
public Result compile(String[] args) {
|
||||
leftToStart.countDown();
|
||||
int numActiveRequests = activeRequests.incrementAndGet();
|
||||
System.out.printf("Left to start: %2d / Currently active: %2d%n",
|
||||
@ -125,7 +123,7 @@ public class PooledExecution {
|
||||
}
|
||||
activeRequests.decrementAndGet();
|
||||
System.out.println("Task completed");
|
||||
return 0;
|
||||
return Result.OK;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Loading…
x
Reference in New Issue
Block a user