diff --git a/briar-api/src/main/java/org/briarproject/briar/api/logging/PersistentLogManager.java b/briar-api/src/main/java/org/briarproject/briar/api/logging/PersistentLogManager.java index a0e44375f..1cefa451e 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/logging/PersistentLogManager.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/logging/PersistentLogManager.java @@ -24,6 +24,8 @@ public interface PersistentLogManager { /** * Creates and returns a persistent log handler that stores its logs in * the given directory. + *

+ * This method should only be called once. */ Handler createLogHandler(File dir) throws IOException; diff --git a/briar-core/src/main/java/org/briarproject/briar/logging/PersistentLogManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/logging/PersistentLogManagerImpl.java index d2b41780e..1d31255aa 100644 --- a/briar-core/src/main/java/org/briarproject/briar/logging/PersistentLogManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/logging/PersistentLogManagerImpl.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.Scanner; import java.util.concurrent.Executor; import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Formatter; import java.util.logging.Handler; import java.util.logging.Logger; @@ -63,6 +64,7 @@ class PersistentLogManagerImpl implements PersistentLogManager, private final StreamWriterFactory streamWriterFactory; private final Formatter formatter; private final SecretKey logKey; + private final AtomicBoolean handlerCreated = new AtomicBoolean(false); @Nullable private volatile SecretKey oldLogKey = null; @@ -103,6 +105,7 @@ class PersistentLogManagerImpl implements PersistentLogManager, @Override public Handler createLogHandler(File dir) throws IOException { + if (handlerCreated.getAndSet(true)) throw new IllegalStateException(); File logFile = new File(dir, LOG_FILE); File oldLogFile = new File(dir, OLD_LOG_FILE); if (oldLogFile.exists() && !oldLogFile.delete())