Changeset 813a198


Ignore:
Timestamp:
Apr 24, 2013 3:45:15 PM (7 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
85f3f56
Parents:
57fd46d
Message:
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelControllerGroup.java

    r57fd46d r813a198  
    126126        if (_mgr != null)
    127127            _mgr.register(this);
    128         _context.addShutdownTask(new Shutdown());
     128            // RouterAppManager registers its own shutdown hook
     129        else
     130            _context.addShutdownTask(new Shutdown());
    129131    }
    130132
     
    195197     *  @since 0.8.8
    196198     */
    197     public void shutdown() {
     199    public synchronized void shutdown() {
     200        if (_state != STARTING && _state != RUNNING)
     201            return;
    198202        changeState(STOPPING);
    199203        if (_mgr != null)
  • apps/jetty/java/src/net/i2p/jetty/JettyStart.java

    r57fd46d r813a198  
    4242public class JettyStart implements ClientApp {
    4343
    44     private final I2PAppContext _context;
    4544    private final ClientAppManager _mgr;
    4645    private final String[] _args;
     
    5150     *  All args must be XML file names.
    5251     *  Does not support any of the other argument types from org.mortbay.start.Main.
     52     *
     53     *  @param context unused, may be null
     54     *  @param mgr may be null e.g. for use in plugins
    5355     */
    5456    public JettyStart(I2PAppContext context, ClientAppManager mgr, String[] args) throws Exception {
    5557        _state = UNINITIALIZED;
    56         _context = context;
    5758        _mgr = mgr;
    5859        _args = args;
     
    101102        public Starter() {
    102103            super("JettyStarter");
     104            changeState(STARTING);
    103105        }
    104106
     
    107109         */
    108110        public void run() {
    109             changeState(STARTING);
    110111            for (LifeCycle lc : _jettys) {
    111112                if (!lc.isRunning()) {
     
    119120            }
    120121            changeState(RUNNING);
    121             _mgr.register(JettyStart.this);
     122            if (_mgr != null)
     123                _mgr.register(JettyStart.this);
    122124        }
    123125    }
    124126
    125     public void shutdown(String[] args) {
     127    public synchronized void shutdown(String[] args) {
    126128        if (_state != RUNNING)
    127129            return;
     
    136138        public Stopper() {
    137139            super("JettyStopper");
     140            changeState(STOPPING);
    138141        }
    139142
    140143        public void run() {
    141             changeState(STOPPING);
    142144            for (LifeCycle lc : _jettys) {
    143145                if (lc.isRunning()) {
     
    171173    private synchronized void changeState(ClientAppState state, Exception e) {
    172174        _state = state;
    173         _mgr.notify(this, state, null, e);
     175        if (_mgr != null)
     176            _mgr.notify(this, state, null, e);
     177    }
     178
     179    /**
     180     *  For use in a plugin clients.config
     181     *  @param args passed to constructor
     182     *  @since 0.9.6
     183     */
     184    public static void main(String[] args) {
     185        try {
     186            new JettyStart(null, null, args);
     187        } catch (RuntimeException e) {
     188            throw e;
     189        } catch (Exception e) {
     190            throw new RuntimeException(e);
     191        }
    174192    }
    175193}
  • apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java

    r57fd46d r813a198  
    215215
    216216    /** @since 0.9.4 */
    217     public void startup() {
     217    public synchronized void startup() {
    218218        changeState(STARTING);
    219219        startTrayApp(_context);
     
    222222
    223223    /** @since 0.9.4 */
    224     public void shutdown(String[] args) {
     224    public synchronized void shutdown(String[] args) {
     225        if (_state == STOPPED)
     226            return;
    225227        changeState(STOPPING);
     228        if (PluginStarter.pluginsEnabled(_context))
     229            (new I2PAppThread(new PluginStopper(_context), "PluginStopper")).start();
    226230        try {
    227231            _server.stop();
     
    654658                t.setPriority(Thread.NORM_PRIORITY - 1);
    655659                t.start();
    656                 _context.addShutdownTask(new PluginStopper(_context));
    657660            }
    658661            // stat summarizer registers its own hook
    659             _context.addShutdownTask(new ServerShutdown());
     662            // RouterAppManager registers its own hook
     663            if (_mgr == null)
     664                _context.addShutdownTask(new ServerShutdown());
    660665            ConfigServiceHandler.registerSignalHandler(_context);
    661666    }
  • history.txt

    r57fd46d r813a198  
     12013-04-24 zzz
     2 * Console, i2ptunnel: Don't register shutdown hook if ClientAppManager is present
     3 * JettyStart: Fixes for use by plugins
     4 * RouterAppManager: Add shutdown hook
     5
    162013-04-23 zzz
    27 * Console: Fix Jetty digest auth bug causing repeated password requests
  • router/java/src/net/i2p/router/RouterVersion.java

    r57fd46d r813a198  
    1919    public final static String ID = "Monotone";
    2020    public final static String VERSION = CoreVersion.VERSION;
    21     public final static long BUILD = 13;
     21    public final static long BUILD = 14;
    2222
    2323    /** for example "-test" */
  • router/java/src/net/i2p/router/startup/RouterAppManager.java

    r57fd46d r813a198  
    66import java.util.ArrayList;
    77import java.util.Collections;
     8import java.util.HashSet;
    89import java.util.List;
    910import java.util.Map;
     11import java.util.Set;
    1012import java.util.concurrent.ConcurrentHashMap;
    1113
     
    3638        _clients = new ConcurrentHashMap(16);
    3739        _registered = new ConcurrentHashMap(8);
     40        ctx.addShutdownTask(new Shutdown());
    3841    }
    3942
     
    167170    }
    168171
     172    /// end ClientAppManager interface
     173
     174    /**
     175     *  @since 0.9.6
     176     */
     177    public synchronized void shutdown() {
     178        Set<ClientApp> apps = new HashSet(_clients.keySet());
     179        for (ClientApp app : apps) {
     180            ClientAppState state = app.getState();
     181            if (state == RUNNING || state == STARTING) {
     182                try {
     183                    app.shutdown(null);
     184                } catch (Throwable t) {}
     185            }
     186        }
     187    }
     188
     189    /**
     190     *  @since 0.9.6
     191     */
     192    public class Shutdown implements Runnable {
     193        public void run() {
     194            shutdown();
     195        }
     196    }
     197
    169198    /**
    170199     *  debug
Note: See TracChangeset for help on using the changeset viewer.