clear interrupted status for threads in shared pool

This commit is contained in:
Eugene Zhuravlev
2012-05-18 00:06:21 +02:00
parent acaf96d954
commit 0c7d3b42ad
2 changed files with 48 additions and 2 deletions
@@ -1,12 +1,46 @@
package org.jetbrains.jps.api;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
/**
* @author Eugene Zhuravlev
* Date: 3/29/12
*/
public class SharedThreadPool {
public static final ExecutorService INSTANCE = Executors.newCachedThreadPool();
public class SharedThreadPool implements Executor {
private static final ExecutorService ourService = Executors.newCachedThreadPool();
public static final SharedThreadPool INSTANCE = new SharedThreadPool();
private SharedThreadPool() {
}
/** @noinspection MethodMayBeStatic*/
public Future<?> submit(final Runnable task) {
return ourService.submit(new Runnable() {
public void run() {
try {
task.run();
}
finally {
Thread.interrupted(); // reset interrupted status
}
}
});
}
public void execute(final Runnable task) {
ourService.execute(new Runnable() {
public void run() {
try {
task.run();
}
finally {
Thread.interrupted(); // reset interrupted status
}
}
});
}
}
@@ -249,9 +249,21 @@ final class BuildSession implements Runnable, CanceledStatus {
}
}
finally {
saveData(pd, dataStorageRoot);
}
}
private void saveData(ProjectDescriptor pd, File dataStorageRoot) {
final boolean wasInterrupted = Thread.interrupted();
try {
saveFsState(dataStorageRoot, pd.fsState, myLastEventOrdinal);
pd.release();
}
finally {
if (wasInterrupted) {
Thread.currentThread().interrupt();
}
}
}
public void processFSEvent(final CmdlineRemoteProto.Message.ControllerMessage.FSEvent event) {