From 189ec874cc52edd228c00c8617f3f9dd2d3644b9 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Thu, 20 Dec 2018 22:34:52 +0000 Subject: [PATCH] @GuardedBy annotations. --- .../bramble/account/AndroidAccountManager.java | 9 +++++---- .../bramble/util/RenewableWakeLock.java | 7 +++++-- .../bramble/account/AccountManagerImpl.java | 13 +++++++------ .../org/briarproject/bramble/db/JdbcDatabase.java | 9 ++++++--- .../org/briarproject/bramble/plugin/Poller.java | 4 +++- .../bramble/transport/TransportKeyManagerImpl.java | 9 +++++---- .../lifecycle/WindowsShutdownManagerImpl.java | 6 ++++-- .../bramble/plugin/modem/ModemImpl.java | 2 +- .../org/briarproject/briar/android/Localizer.java | 3 ++- .../briar/android/logging/BriefLogFormatter.java | 7 +++++-- .../briar/android/logging/CachingLogHandler.java | 3 ++- 11 files changed, 45 insertions(+), 27 deletions(-) diff --git a/bramble-android/src/main/java/org/briarproject/bramble/account/AndroidAccountManager.java b/bramble-android/src/main/java/org/briarproject/bramble/account/AndroidAccountManager.java index a51f03e52..3b92b0396 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/account/AndroidAccountManager.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/account/AndroidAccountManager.java @@ -14,6 +14,7 @@ import java.io.File; import java.util.logging.Logger; import javax.annotation.Nullable; +import javax.annotation.concurrent.GuardedBy; import javax.inject.Inject; import static java.util.logging.Logger.getLogger; @@ -39,7 +40,7 @@ class AndroidAccountManager extends AccountManagerImpl appContext = app.getApplicationContext(); } - // Locking: stateChangeLock + @GuardedBy("stateChangeLock") @Override @Nullable protected String loadEncryptedDatabaseKey() { @@ -49,7 +50,7 @@ class AndroidAccountManager extends AccountManagerImpl return key; } - // Locking: stateChangeLock + @GuardedBy("stateChangeLock") @Nullable private String getDatabaseKeyFromPreferences() { String key = prefs.getString(PREF_DB_KEY, null); @@ -58,7 +59,7 @@ class AndroidAccountManager extends AccountManagerImpl return key; } - // Locking: stateChangeLock + @GuardedBy("stateChangeLock") private void migrateDatabaseKeyToFile(String key) { if (storeEncryptedDatabaseKey(key)) { if (prefs.edit().remove(PREF_DB_KEY).commit()) @@ -83,7 +84,7 @@ class AndroidAccountManager extends AccountManagerImpl return PreferenceManager.getDefaultSharedPreferences(appContext); } - // Locking: stateChangeLock + @GuardedBy("stateChangeLock") private void deleteAppData(SharedPreferences... clear) { // Clear and commit shared preferences for (SharedPreferences prefs : clear) { diff --git a/bramble-android/src/main/java/org/briarproject/bramble/util/RenewableWakeLock.java b/bramble-android/src/main/java/org/briarproject/bramble/util/RenewableWakeLock.java index a0c779903..225a7d087 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/util/RenewableWakeLock.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/util/RenewableWakeLock.java @@ -10,6 +10,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import javax.annotation.Nullable; +import javax.annotation.concurrent.GuardedBy; import javax.annotation.concurrent.ThreadSafe; import static java.util.concurrent.TimeUnit.MILLISECONDS; @@ -37,10 +38,12 @@ public class RenewableWakeLock { private final Runnable renewTask; private final Object lock = new Object(); + @GuardedBy("lock") @Nullable - private PowerManager.WakeLock wakeLock; // Locking: lock + private PowerManager.WakeLock wakeLock; + @GuardedBy("lock") @Nullable - private ScheduledFuture future; // Locking: lock + private ScheduledFuture future; public RenewableWakeLock(PowerManager powerManager, ScheduledExecutorService scheduler, int levelAndFlags, String tag, diff --git a/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java index a13c99036..f57dae778 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java @@ -17,6 +17,7 @@ import java.io.InputStreamReader; import java.util.logging.Logger; import javax.annotation.Nullable; +import javax.annotation.concurrent.GuardedBy; import javax.inject.Inject; import static java.util.logging.Level.WARNING; @@ -67,7 +68,7 @@ class AccountManagerImpl implements AccountManager { return databaseKey; } - // Locking: stateChangeLock + @GuardedBy("stateChangeLock") @Nullable protected String loadEncryptedDatabaseKey() { String key = readDbKeyFromFile(dbKeyFile); @@ -82,7 +83,7 @@ class AccountManagerImpl implements AccountManager { return key; } - // Locking: stateChangeLock + @GuardedBy("stateChangeLock") @Nullable private String readDbKeyFromFile(File f) { if (!f.exists()) { @@ -101,7 +102,7 @@ class AccountManagerImpl implements AccountManager { } } - // Locking: stateChangeLock + @GuardedBy("stateChangeLock") boolean storeEncryptedDatabaseKey(String hex) { LOG.info("Storing database key in file"); // Create the directory if necessary @@ -139,7 +140,7 @@ class AccountManagerImpl implements AccountManager { } } - // Locking: stateChangeLock + @GuardedBy("stateChangeLock") private void writeDbKeyToFile(String key, File f) throws IOException { FileOutputStream out = new FileOutputStream(f); out.write(key.getBytes("UTF-8")); @@ -169,7 +170,7 @@ class AccountManagerImpl implements AccountManager { } } - // Locking: stateChangeLock + @GuardedBy("stateChangeLock") private boolean encryptAndStoreDatabaseKey(SecretKey key, String password) { byte[] plaintext = key.getBytes(); byte[] ciphertext = crypto.encryptWithPassword(plaintext, password); @@ -196,7 +197,7 @@ class AccountManagerImpl implements AccountManager { } } - // Locking: stateChangeLock + @GuardedBy("stateChangeLock") @Nullable private SecretKey loadAndDecryptDatabaseKey(String password) { String hex = loadEncryptedDatabaseKey(); diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java b/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java index 77bbc1831..b5f0e8231 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java @@ -52,6 +52,7 @@ import java.util.concurrent.locks.ReentrantLock; import java.util.logging.Logger; import javax.annotation.Nullable; +import javax.annotation.concurrent.GuardedBy; import static java.lang.System.arraycopy; import static java.sql.Types.INTEGER; @@ -319,11 +320,13 @@ abstract class JdbcDatabase implements Database { private final Clock clock; private final DatabaseTypes dbTypes; - // Locking: connectionsLock + @GuardedBy("connectionsLock") private final LinkedList connections = new LinkedList<>(); - private int openConnections = 0; // Locking: connectionsLock - private boolean closed = false; // Locking: connectionsLock + @GuardedBy("connectionsLock") + private int openConnections = 0; + @GuardedBy("connectionsLock") + private boolean closed = false; protected abstract Connection createConnection() throws SQLException; diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/Poller.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/Poller.java index e533b61fd..6bb1284e5 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/Poller.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/Poller.java @@ -36,6 +36,7 @@ import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import java.util.logging.Logger; +import javax.annotation.concurrent.GuardedBy; import javax.annotation.concurrent.ThreadSafe; import static java.util.concurrent.TimeUnit.MILLISECONDS; @@ -59,7 +60,8 @@ class Poller implements EventListener { private final SecureRandom random; private final Clock clock; private final Lock lock; - private final Map tasks; // Locking: lock + @GuardedBy("lock") + private final Map tasks; Poller(@IoExecutor Executor ioExecutor, @Scheduler ScheduledExecutorService scheduler, diff --git a/bramble-core/src/main/java/org/briarproject/bramble/transport/TransportKeyManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/transport/TransportKeyManagerImpl.java index ea85c23a4..5ba164cd7 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/transport/TransportKeyManagerImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/transport/TransportKeyManagerImpl.java @@ -28,6 +28,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.locks.ReentrantLock; import java.util.logging.Logger; +import javax.annotation.concurrent.GuardedBy; import javax.annotation.concurrent.ThreadSafe; import static java.util.concurrent.TimeUnit.MILLISECONDS; @@ -111,7 +112,7 @@ class TransportKeyManagerImpl implements TransportKeyManager { return rotationResult; } - // Locking: lock + @GuardedBy("lock") private void addKeys(Collection keys) { for (KeySet ks : keys) { addKeys(ks.getKeySetId(), ks.getContactId(), @@ -119,7 +120,7 @@ class TransportKeyManagerImpl implements TransportKeyManager { } } - // Locking: lock + @GuardedBy("lock") private void addKeys(KeySetId keySetId, ContactId contactId, MutableTransportKeys m) { MutableKeySet ks = new MutableKeySet(keySetId, contactId, m); @@ -130,7 +131,7 @@ class TransportKeyManagerImpl implements TransportKeyManager { considerReplacingOutgoingKeys(ks); } - // Locking: lock + @GuardedBy("lock") private void encodeTags(KeySetId keySetId, ContactId contactId, MutableIncomingKeys inKeys) { for (long streamNumber : inKeys.getWindow().getUnseen()) { @@ -143,7 +144,7 @@ class TransportKeyManagerImpl implements TransportKeyManager { } } - // Locking: lock + @GuardedBy("lock") private void considerReplacingOutgoingKeys(MutableKeySet ks) { // Use the active outgoing keys with the highest key set ID if (ks.getTransportKeys().getCurrentOutgoingKeys().isActive()) { diff --git a/bramble-java/src/main/java/org/briarproject/bramble/lifecycle/WindowsShutdownManagerImpl.java b/bramble-java/src/main/java/org/briarproject/bramble/lifecycle/WindowsShutdownManagerImpl.java index ec8a0bb3b..41e5406fc 100644 --- a/bramble-java/src/main/java/org/briarproject/bramble/lifecycle/WindowsShutdownManagerImpl.java +++ b/bramble-java/src/main/java/org/briarproject/bramble/lifecycle/WindowsShutdownManagerImpl.java @@ -22,6 +22,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Logger; import javax.annotation.Nullable; +import javax.annotation.concurrent.GuardedBy; import javax.annotation.concurrent.ThreadSafe; import static com.sun.jna.Library.OPTION_FUNCTION_MAPPER; @@ -45,7 +46,8 @@ class WindowsShutdownManagerImpl extends ShutdownManagerImpl { private final Map options; - private boolean initialised = false; // Locking: lock + @GuardedBy("lock") + private boolean initialised = false; WindowsShutdownManagerImpl() { // Use the Unicode versions of Win32 API calls @@ -71,7 +73,7 @@ class WindowsShutdownManagerImpl extends ShutdownManagerImpl { return new StartOnce(r); } - // Locking: lock + @GuardedBy("lock") private void initialise() { if (isWindows()) { new EventLoop().start(); diff --git a/bramble-java/src/main/java/org/briarproject/bramble/plugin/modem/ModemImpl.java b/bramble-java/src/main/java/org/briarproject/bramble/plugin/modem/ModemImpl.java index 49f39e58d..4c0e70516 100644 --- a/bramble-java/src/main/java/org/briarproject/bramble/plugin/modem/ModemImpl.java +++ b/bramble-java/src/main/java/org/briarproject/bramble/plugin/modem/ModemImpl.java @@ -182,7 +182,7 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener { } } - // Locking: stateChange + @GuardedBy("stateChange") private void hangUpInner() throws IOException { ReliabilityLayer reliability; lock.lock(); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/Localizer.java b/briar-android/src/main/java/org/briarproject/briar/android/Localizer.java index 167f37947..b8438b88a 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/Localizer.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/Localizer.java @@ -10,6 +10,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import java.util.Locale; import javax.annotation.Nullable; +import javax.annotation.concurrent.GuardedBy; import static android.os.Build.VERSION.SDK_INT; import static org.briarproject.briar.android.settings.SettingsFragment.LANGUAGE; @@ -17,7 +18,7 @@ import static org.briarproject.briar.android.settings.SettingsFragment.LANGUAGE; @NotNullByDefault public class Localizer { - // Locking: class + @GuardedBy("Localizer.class") @Nullable private static Localizer INSTANCE; private final Locale systemLocale; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/logging/BriefLogFormatter.java b/briar-android/src/main/java/org/briarproject/briar/android/logging/BriefLogFormatter.java index 00906c93e..530b37fab 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/logging/BriefLogFormatter.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/logging/BriefLogFormatter.java @@ -9,6 +9,7 @@ import java.util.TimeZone; import java.util.logging.Formatter; import java.util.logging.LogRecord; +import javax.annotation.concurrent.GuardedBy; import javax.annotation.concurrent.ThreadSafe; import static java.util.Locale.US; @@ -18,8 +19,10 @@ import static java.util.Locale.US; public class BriefLogFormatter extends Formatter { private final Object lock = new Object(); - private final DateFormat dateFormat; // Locking: lock - private final Date date; // Locking: lock + @GuardedBy("lock") + private final DateFormat dateFormat; + @GuardedBy("lock") + private final Date date; public BriefLogFormatter() { synchronized (lock) { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/logging/CachingLogHandler.java b/briar-android/src/main/java/org/briarproject/briar/android/logging/CachingLogHandler.java index baa51e3f6..88297c95d 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/logging/CachingLogHandler.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/logging/CachingLogHandler.java @@ -9,6 +9,7 @@ import java.util.Queue; import java.util.logging.Handler; import java.util.logging.LogRecord; +import javax.annotation.concurrent.GuardedBy; import javax.annotation.concurrent.ThreadSafe; @ThreadSafe @@ -18,7 +19,7 @@ public class CachingLogHandler extends Handler { private static final int MAX_RECENT_RECORDS = 100; private final Object lock = new Object(); - // Locking: lock + @GuardedBy("lock") private final Queue recent = new LinkedList<>(); @Override