removed startup race condition. shutdown and exit now triggered on off switch toggled

pull/13/head
knaccc 5 years ago
parent 3ca894ced3
commit 1585edb2f3

@ -74,6 +74,7 @@ public class Controller {
DecimalFormat format2dp = new DecimalFormat("0.00"); DecimalFormat format2dp = new DecimalFormat("0.00");
private boolean masterState = true; private boolean masterState = true;
private boolean shuttingDown = false;
private final ObservableList<Tunnel> tunnelTableList = FXCollections.observableArrayList(); private final ObservableList<Tunnel> tunnelTableList = FXCollections.observableArrayList();
private boolean eepSiteTabInitialized = false; private boolean eepSiteTabInitialized = false;
@ -235,37 +236,29 @@ public class Controller {
}); });
masterToggle.setOnMouseClicked(e->{ masterToggle.setOnMouseClicked(e->{
if(shuttingDown) return;
masterState = !masterState; masterState = !masterState;
bandwidthDisabledOverlay.setVisible(!masterState); bandwidthDisabledOverlay.setVisible(!masterState);
if(masterState) { if(masterState) {
masterToggle.setImage(new Image("org/getmonero/i2p/zero/gui/toggle-on.png")); masterToggle.setImage(new Image("org/getmonero/i2p/zero/gui/toggle-on.png"));
statusLabel.setVisible(true); statusLabel.setVisible(true);
routerWrapper.start(); routerWrapper.start();
listenForTunnelChanges();
tunnelAddButton.setDisable(false); tunnelAddButton.setDisable(false);
} }
else { else {
shuttingDown = true;
masterToggle.setImage(new Image("org/getmonero/i2p/zero/gui/toggle-off.png")); masterToggle.setImage(new Image("org/getmonero/i2p/zero/gui/toggle-off.png"));
statusLabel.setVisible(false);
routerWrapper.stop(false);
tunnelTableList.clear(); tunnelTableList.clear();
tunnelAddButton.setDisable(true); tunnelAddButton.setDisable(true);
statusLabel.setText("Shutting down...");
routerWrapper.stop(true);
} }
}); });
startRouter(); startRouter();
new Thread(()->{ listenForTunnelChanges();
while(getRouterWrapper()==null || getRouterWrapper().getTunnelControl()==null) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
}
var tunnelList = getRouterWrapper().getTunnelControl().getTunnelList();
tunnelList.addChangeListener(tunnels->{
tunnelTableList.clear();
tunnels.stream().filter(Tunnel::getEnabled).forEach(tunnelTableList::add);
});
}).start();
var bandwidthUpdateThread = new Thread(()->{ var bandwidthUpdateThread = new Thread(()->{
while(!Gui.instance.isStopping()) { while(!Gui.instance.isStopping()) {
@ -293,6 +286,20 @@ public class Controller {
} }
private void listenForTunnelChanges() {
new Thread(()->{
while(getRouterWrapper()==null || getRouterWrapper().getTunnelControl()==null) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
}
var tunnelList = getRouterWrapper().getTunnelControl().getTunnelList();
tunnelList.addChangeListener(tunnels->{
tunnelTableList.clear();
tunnels.stream().filter(Tunnel::getEnabled).forEach(tunnelTableList::add);
});
getRouterWrapper().getTunnelControl().getTunnelList().fireChangeEvent();
}).start();
}
public RouterWrapper getRouterWrapper() { public RouterWrapper getRouterWrapper() {
return routerWrapper; return routerWrapper;
} }

@ -98,14 +98,15 @@ public class RouterWrapper {
} }
public void stop(boolean fastStop) { public void stop(boolean fastStopAndShutDown) {
if(!started) return; if(!started) return;
started = false; started = false;
tunnelControl.stop(fastStop); tunnelControl.stop(fastStopAndShutDown);
tunnelControl = null;
System.out.println("I2P router will shut down gracefully"); System.out.println("I2P router will shut down gracefully");
router.shutdownGracefully(); router.shutdownGracefully();
if(fastStop) { if(fastStopAndShutDown) {
// don't wait more than 2 seconds for shutdown. If tunnels are still opening, they can pause for up to 20 seconds, which is too long // don't wait more than 2 seconds for shutdown. If tunnels are still opening, they can pause for up to 20 seconds, which is too long
new Thread(() -> { new Thread(() -> {
try { Thread.sleep(2000); } catch (InterruptedException e) {} try { Thread.sleep(2000); } catch (InterruptedException e) {}

Loading…
Cancel
Save