diff --git a/components/net/sf/briar/transport/KeyManagerImpl.java b/components/net/sf/briar/transport/KeyManagerImpl.java index 7aa38d5d517a1abfcbca73da392f4ab223bfdf1d..03cfb58cdf56af6e2f5671b4c54c87b431dfb1d7 100644 --- a/components/net/sf/briar/transport/KeyManagerImpl.java +++ b/components/net/sf/briar/transport/KeyManagerImpl.java @@ -76,8 +76,8 @@ class KeyManagerImpl extends TimerTask implements KeyManager, DatabaseListener { try { // Store any secrets that have been created if(!created.isEmpty()) db.addSecrets(created); - // Pass the current incoming secrets to the connection recogniser - // FIXME: This uses a separate database transaction for each secret + // Pass the current incoming secrets to the recogniser + // FIXME: This uses a separate database transaction per secret for(TemporarySecret s : incomingOld.values()) recogniser.addSecret(s); for(TemporarySecret s : incomingNew.values()) @@ -237,19 +237,25 @@ class KeyManagerImpl extends TimerTask implements KeyManager, DatabaseListener { // Work out what phase of its lifecycle each secret is in long now = System.currentTimeMillis(); Collection<TemporarySecret> dead = assignSecretsToMaps(now, secrets); + // Remove any dead secrets from the recogniser + for(TemporarySecret s : dead) { + ContactId c = s.getContactId(); + TransportId t = s.getTransportId(); + long period = s.getPeriod(); + recogniser.removeSecret(c, t, period); + } // Replace any dead secrets Collection<TemporarySecret> created = replaceDeadSecrets(now, dead); - try { - // Store any secrets that have been created - if(!created.isEmpty()) db.addSecrets(created); - // Pass the current incoming secrets to the connection recogniser - // FIXME: This uses a separate database transaction for each secret - for(TemporarySecret s : incomingOld.values()) - recogniser.addSecret(s); - for(TemporarySecret s : incomingNew.values()) - recogniser.addSecret(s); - } catch(DbException e) { - if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString()); + if(!created.isEmpty()) { + try { + // Store any secrets that have been created + db.addSecrets(created); + // Pass any secrets that have been created to the recogniser + // FIXME: This uses a separate database transaction per secret + for(TemporarySecret s : created) recogniser.addSecret(s); + } catch(DbException e) { + if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString()); + } } }