This commit is contained in:
hypnosis-i2p 2016-07-13 19:36:18 +08:00
parent 95ae23a32c
commit a3286ebac3
2 changed files with 53 additions and 38 deletions

View File

@ -18,7 +18,7 @@ public class DaemonSingleton {
public synchronized void addStateChangeListener(StateChangeListener listener) { stateChangeListeners.add(listener); }
public synchronized void removeStateChangeListener(StateChangeListener listener) { stateChangeListeners.remove(listener); }
public void stopAcceptingTunnels() {
public synchronized void stopAcceptingTunnels() {
if(isStartedOkay()){
state=State.gracefulShutdownInProgress;
fireStateChange();
@ -39,6 +39,7 @@ public class DaemonSingleton {
public State getState() { return state; }
{
synchronized(this){
fireStateChange();
new Thread(new Runnable(){
@ -46,29 +47,38 @@ public class DaemonSingleton {
public void run() {
try {
I2PD_JNI.loadLibraries();
synchronized (DaemonSingleton.this) {
state = State.jniLibraryLoaded;
fireStateChange();
}
} catch (Throwable tr) {
lastThrowable=tr;
synchronized (DaemonSingleton.this) {
state = State.startFailed;
fireStateChange();
}
return;
}
try {
synchronized (DaemonSingleton.this) {
daemonStartResult = I2PD_JNI.startDaemon();
if("ok".equals(daemonStartResult)){state=State.startedOkay;setStartedOkay(true);}
else state=State.startFailed;
fireStateChange();
}
} catch (Throwable tr) {
lastThrowable=tr;
synchronized (DaemonSingleton.this) {
state = State.startFailed;
fireStateChange();
}
return;
}
}
}, "i2pdDaemonStart").start();
}
}
private Throwable lastThrowable;
private String daemonStartResult="N/A";
@ -91,15 +101,21 @@ public class DaemonSingleton {
return daemonStartResult;
}
public synchronized boolean isStartedOkay() {
private final Object startedOkayLock = new Object();
public boolean isStartedOkay() {
synchronized (startedOkayLock) {
return startedOkay;
}
private synchronized void setStartedOkay(boolean startedOkay) {
this.startedOkay = startedOkay;
}
public void stopDaemon() {
private void setStartedOkay(boolean startedOkay) {
synchronized (startedOkayLock) {
this.startedOkay = startedOkay;
}
}
public synchronized void stopDaemon() {
if(isStartedOkay()){
try {I2PD_JNI.stopDaemon();}catch(Throwable tr){Log.e(TAG, "", tr);}
setStartedOkay(false);

View File

@ -5,8 +5,6 @@ import java.io.StringWriter;
import java.util.Timer;
import java.util.TimerTask;
import org.purplei2p.i2pd.DaemonSingleton.State;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ComponentName;
@ -76,8 +74,9 @@ public class I2PD extends Activity {
private void localDestroy() {
textView = null;
daemon.removeStateChangeListener(daemonStateChangeListener);
if(getGracefulQuitTimer()!=null) {
getGracefulQuitTimer().cancel();
Timer gracefulQuitTimer = getGracefulQuitTimer();
if(gracefulQuitTimer!=null) {
gracefulQuitTimer.cancel();
setGracefulQuitTimer(null);
}
try{