]> nmode's Git Repositories - signal-cli/commitdiff
Cache newly created session record
authorAsamK <asamk@gmx.de>
Mon, 15 Apr 2024 17:23:41 +0000 (19:23 +0200)
committerAsamK <asamk@gmx.de>
Mon, 15 Apr 2024 17:23:50 +0000 (19:23 +0200)
Fixes #1481

lib/src/main/java/org/asamk/signal/manager/storage/sessions/SessionStore.java

index 3f3ba4d6709929580fc1dc760158546d820d8248..067dc5d3c26d8dafee854251b993469209416065 100644 (file)
@@ -59,8 +59,11 @@ public class SessionStore implements SignalServiceSessionStore {
     public SessionRecord loadSession(SignalProtocolAddress address) {
         final var key = getKey(address);
         try (final var connection = database.getConnection()) {
     public SessionRecord loadSession(SignalProtocolAddress address) {
         final var key = getKey(address);
         try (final var connection = database.getConnection()) {
-            final var session = loadSession(connection, key);
-            return Objects.requireNonNullElseGet(session, SessionRecord::new);
+            final var sessionRecord = Objects.requireNonNullElseGet(loadSession(connection, key), SessionRecord::new);
+            synchronized (cachedSessions) {
+                cachedSessions.put(key, sessionRecord);
+            }
+            return sessionRecord;
         } catch (SQLException e) {
             throw new RuntimeException("Failed read from session store", e);
         }
         } catch (SQLException e) {
             throw new RuntimeException("Failed read from session store", e);
         }
@@ -148,7 +151,9 @@ public class SessionStore implements SignalServiceSessionStore {
 
         try (final var connection = database.getConnection()) {
             final var session = loadSession(connection, key);
 
         try (final var connection = database.getConnection()) {
             final var session = loadSession(connection, key);
-            return isActive(session);
+            final var active = isActive(session);
+            logger.trace("Contains session {}: {} (active: {})", address, session != null, active);
+            return active;
         } catch (SQLException e) {
             throw new RuntimeException("Failed read from session store", e);
         }
         } catch (SQLException e) {
             throw new RuntimeException("Failed read from session store", e);
         }