From 7bb624376239273708c194bf6934dbf71aae9748 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Sat, 8 Sep 2012 14:19:32 +0200 Subject: [PATCH] save fs state and release project in finally block --- .../jetbrains/jps/cmdline/BuildSession.java | 48 ++++++++++--------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildSession.java b/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildSession.java index 42c0118cbed4..865bb84663a9 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildSession.java +++ b/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildSession.java @@ -10,9 +10,9 @@ import com.intellij.util.io.DataOutputStream; import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.Channels; import org.jetbrains.annotations.Nullable; -import org.jetbrains.jps.builders.java.dependencyView.Callbacks; import org.jetbrains.jps.api.*; import org.jetbrains.jps.builders.java.JavaModuleBuildTargetType; +import org.jetbrains.jps.builders.java.dependencyView.Callbacks; import org.jetbrains.jps.incremental.MessageHandler; import org.jetbrains.jps.incremental.ModuleBuildTarget; import org.jetbrains.jps.incremental.Utils; @@ -161,32 +161,36 @@ final class BuildSession implements Runnable, CanceledStatus { } final BuildFSState fsState = new BuildFSState(false); - final ProjectDescriptor pd = myBuildRunner.load(msgHandler, dataStorageRoot, fsState); - myProjectDescriptor = pd; - if (fsStateStream != null) { - try { + try { + final ProjectDescriptor pd = myBuildRunner.load(msgHandler, dataStorageRoot, fsState); + myProjectDescriptor = pd; + if (fsStateStream != null) { try { - fsState.load(fsStateStream, pd); - applyFSEvent(pd, myInitialFSDelta); + try { + fsState.load(fsStateStream, pd); + applyFSEvent(pd, myInitialFSDelta); + } + finally { + fsStateStream.close(); + } } - finally { - fsStateStream.close(); + catch (Throwable e) { + LOG.error(e); + fsState.clearAll(); } } - catch (Throwable e) { - LOG.error(e); - fsState.clearAll(); - } + myLastEventOrdinal = myInitialFSDelta != null? myInitialFSDelta.getOrdinal() : 0L; + + // free memory + myInitialFSDelta = null; + // ensure events from controller are processed after FSState initialization + myEventsProcessor.startProcessing(); + + myBuildRunner.runBuild(pd, cs, myConstantSearch, msgHandler, true, myBuildType); + } + finally { + saveData(fsState, dataStorageRoot); } - myLastEventOrdinal = myInitialFSDelta != null? myInitialFSDelta.getOrdinal() : 0L; - - // free memory - myInitialFSDelta = null; - // ensure events from controller are processed after FSState initialization - myEventsProcessor.startProcessing(); - - myBuildRunner.runBuild(pd, cs, myConstantSearch, msgHandler, true, myBuildType); - saveData(fsState, dataStorageRoot); } private void saveData(final BuildFSState fsState, File dataStorageRoot) {