From 3a4a9886f829594d64b0ccb89813c684f406325d Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Thu, 10 Apr 2014 18:58:09 -0400 Subject: [PATCH] Clear instantiated commands and dispatchers from the dispatcher on destroy() --- src/main/java/com/gitblit/transport/ssh/commands/BaseCommand.java | 40 ++++++++++++++++++++++++++-------------- 1 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/gitblit/transport/ssh/commands/BaseCommand.java b/src/main/java/com/gitblit/transport/ssh/commands/BaseCommand.java index baa892c..4162a40 100644 --- a/src/main/java/com/gitblit/transport/ssh/commands/BaseCommand.java +++ b/src/main/java/com/gitblit/transport/ssh/commands/BaseCommand.java @@ -37,7 +37,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.gitblit.transport.ssh.SshCommandContext; import com.gitblit.utils.IdGenerator; import com.gitblit.utils.WorkQueue; import com.gitblit.utils.WorkQueue.CancelableRunnable; @@ -49,8 +48,13 @@ private static final Logger log = LoggerFactory.getLogger(BaseCommand.class); - /** Ssh context */ - protected SshCommandContext ctx; + private static final int PRIVATE_STATUS = 1 << 30; + + public final static int STATUS_CANCEL = PRIVATE_STATUS | 1; + + public final static int STATUS_NOT_FOUND = PRIVATE_STATUS | 2; + + public final static int STATUS_NOT_ADMIN = PRIVATE_STATUS | 3; protected InputStream in; @@ -61,6 +65,9 @@ protected ExitCallback exit; protected ServerSession session; + + /** Ssh command context */ + private SshCommandContext ctx; /** Text of the command line which lead up to invoking this instance. */ private String commandName = ""; @@ -87,6 +94,9 @@ @Override public void destroy() { + log.debug("destroying " + getClass().getName()); + session = null; + ctx = null; } protected static PrintWriter toPrintWriter(final OutputStream o) { @@ -96,8 +106,20 @@ @Override public abstract void start(Environment env) throws IOException; + protected void provideStateTo(final BaseCommand cmd) { + cmd.setContext(ctx); + cmd.setInputStream(in); + cmd.setOutputStream(out); + cmd.setErrorStream(err); + cmd.setExitCallback(exit); + } + public void setContext(SshCommandContext ctx) { this.ctx = ctx; + } + + public SshCommandContext getContext() { + return ctx; } @Override @@ -118,16 +140,6 @@ @Override public void setExitCallback(final ExitCallback callback) { this.exit = callback; - } - - protected void provideBaseStateTo(final Command cmd) { - if (cmd instanceof BaseCommand) { - ((BaseCommand) cmd).setContext(ctx); - } - cmd.setInputStream(in); - cmd.setOutputStream(out); - cmd.setErrorStream(err); - cmd.setExitCallback(exit); } protected String getName() { @@ -200,7 +212,7 @@ return new CmdLineParser(options); } - protected String usage() { + public String usage() { return ""; } -- Gitblit v1.9.1