Browse Source

updated

pull/572/head
hypnosis-i2p 8 years ago
parent
commit
a3286ebac3
  1. 82
      android/src/org/purplei2p/i2pd/DaemonSingleton.java
  2. 7
      android/src/org/purplei2p/i2pd/I2PD.java

82
android/src/org/purplei2p/i2pd/DaemonSingleton.java

@ -18,7 +18,7 @@ public class DaemonSingleton { @@ -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,35 +39,45 @@ public class DaemonSingleton { @@ -39,35 +39,45 @@ public class DaemonSingleton {
public State getState() { return state; }
{
fireStateChange();
new Thread(new Runnable(){
@Override
public void run() {
try {
I2PD_JNI.loadLibraries();
state = State.jniLibraryLoaded;
fireStateChange();
} catch (Throwable tr) {
lastThrowable=tr;
state = State.startFailed;
fireStateChange();
return;
}
try {
daemonStartResult = I2PD_JNI.startDaemon();
if("ok".equals(daemonStartResult)){state=State.startedOkay;setStartedOkay(true);}
else state=State.startFailed;
fireStateChange();
} catch (Throwable tr) {
lastThrowable=tr;
state = State.startFailed;
fireStateChange();
return;
synchronized(this){
fireStateChange();
new Thread(new Runnable(){
@Override
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();
}, "i2pdDaemonStart").start();
}
}
private Throwable lastThrowable;
private String daemonStartResult="N/A";
@ -91,15 +101,21 @@ public class DaemonSingleton { @@ -91,15 +101,21 @@ public class DaemonSingleton {
return daemonStartResult;
}
public synchronized boolean isStartedOkay() {
return startedOkay;
private final Object startedOkayLock = new Object();
public boolean isStartedOkay() {
synchronized (startedOkayLock) {
return startedOkay;
}
}
private synchronized void setStartedOkay(boolean startedOkay) {
this.startedOkay = startedOkay;
private void setStartedOkay(boolean startedOkay) {
synchronized (startedOkayLock) {
this.startedOkay = startedOkay;
}
}
public void stopDaemon() {
public synchronized void stopDaemon() {
if(isStartedOkay()){
try {I2PD_JNI.stopDaemon();}catch(Throwable tr){Log.e(TAG, "", tr);}
setStartedOkay(false);

7
android/src/org/purplei2p/i2pd/I2PD.java

@ -5,8 +5,6 @@ import java.io.StringWriter; @@ -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 { @@ -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{

Loading…
Cancel
Save