Skip to content

Commit

Permalink
Merge pull request #855 from alvasw/tor_atomatically_update_state_do_…
Browse files Browse the repository at this point in the history
…start

Tor: Atomically update state in doStart()
  • Loading branch information
alvasw committed May 17, 2023
2 parents 32db972 + 39c0d78 commit f730a14
Showing 1 changed file with 22 additions and 18 deletions.
40 changes: 22 additions & 18 deletions network/tor/src/main/java/bisq/tor/Tor.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,7 @@
import java.util.concurrent.ExecutorService;
import java.util.concurrent.atomic.AtomicReference;

import static bisq.tor.Tor.State.RUNNING;
import static bisq.tor.Tor.State.STARTING;
import static bisq.tor.Tor.State.*;
import static com.google.common.base.Preconditions.checkArgument;
import static java.io.File.separator;

Expand Down Expand Up @@ -149,24 +148,13 @@ public void shutdown() {
setState(State.TERMINATED);
}

private synchronized boolean doStart() {
switch (state.get()) {
private boolean doStart() {
State previousState = state.compareAndExchange(NEW, STARTING);
switch (previousState) {
case NEW: {
setState(STARTING);
long ts = System.currentTimeMillis();
try {
int controlPort = torBootstrap.start();
torController.start(controlPort);
proxyPort = torController.getProxyPort();
} catch (Exception exception) {
torBootstrap.deleteVersionFile();
log.error("Starting tor failed.", exception);
shutdown();
return false;
}
log.info(">> Starting Tor took {} ms", System.currentTimeMillis() - ts);
boolean isSuccess = startTor();
setState(RUNNING);
return true;
return isSuccess;
}
case STARTING: {
throw new IllegalStateException("Already starting.");
Expand All @@ -184,6 +172,22 @@ private synchronized boolean doStart() {
}
}

private boolean startTor() {
long ts = System.currentTimeMillis();
try {
int controlPort = torBootstrap.start();
torController.start(controlPort);
proxyPort = torController.getProxyPort();
} catch (Exception exception) {
torBootstrap.deleteVersionFile();
log.error("Starting tor failed.", exception);
shutdown();
return false;
}
log.info(">> Starting Tor took {} ms", System.currentTimeMillis() - ts);
return true;
}

public TorServerSocket getTorServerSocket() throws IOException {
checkArgument(state.get() == RUNNING,
"Invalid state at Tor.getTorServerSocket. state=" + state.get());
Expand Down

0 comments on commit f730a14

Please sign in to comment.