mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-21 23:29:52 +01:00
Moved synchronisation out of event handler. Fixes issue #3611966.
This commit is contained in:
@@ -329,30 +329,14 @@ class KeyManagerImpl extends TimerTask implements KeyManager, DatabaseListener {
|
|||||||
|
|
||||||
public void eventOccurred(DatabaseEvent e) {
|
public void eventOccurred(DatabaseEvent e) {
|
||||||
if(e instanceof ContactRemovedEvent) {
|
if(e instanceof ContactRemovedEvent) {
|
||||||
ContactId c = ((ContactRemovedEvent) e).getContactId();
|
ContactRemovedEvent c = (ContactRemovedEvent) e;
|
||||||
connectionRecogniser.removeSecrets(c);
|
timer.schedule(new ContactRemovedTask(c), 0);
|
||||||
// FIXME: Listeners should not block
|
|
||||||
synchronized(this) {
|
|
||||||
removeAndEraseSecrets(c, oldSecrets);
|
|
||||||
removeAndEraseSecrets(c, currentSecrets);
|
|
||||||
removeAndEraseSecrets(c, newSecrets);
|
|
||||||
}
|
|
||||||
} else if(e instanceof TransportAddedEvent) {
|
} else if(e instanceof TransportAddedEvent) {
|
||||||
TransportAddedEvent t = (TransportAddedEvent) e;
|
TransportAddedEvent t = (TransportAddedEvent) e;
|
||||||
// FIXME: Listeners should not block
|
timer.schedule(new TransportAddedTask(t), 0);
|
||||||
synchronized(this) {
|
|
||||||
maxLatencies.put(t.getTransportId(), t.getMaxLatency());
|
|
||||||
}
|
|
||||||
} else if(e instanceof TransportRemovedEvent) {
|
} else if(e instanceof TransportRemovedEvent) {
|
||||||
TransportId t = ((TransportRemovedEvent) e).getTransportId();
|
TransportRemovedEvent t = (TransportRemovedEvent) e;
|
||||||
connectionRecogniser.removeSecrets(t);
|
timer.schedule(new TransportRemovedTask(t), 0);
|
||||||
// FIXME: Listeners should not block
|
|
||||||
synchronized(this) {
|
|
||||||
maxLatencies.remove(t);
|
|
||||||
removeAndEraseSecrets(t, oldSecrets);
|
|
||||||
removeAndEraseSecrets(t, currentSecrets);
|
|
||||||
removeAndEraseSecrets(t, newSecrets);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -410,4 +394,58 @@ class KeyManagerImpl extends TimerTask implements KeyManager, DatabaseListener {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class ContactRemovedTask extends TimerTask {
|
||||||
|
|
||||||
|
private final ContactRemovedEvent event;
|
||||||
|
|
||||||
|
private ContactRemovedTask(ContactRemovedEvent event) {
|
||||||
|
this.event = event;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
ContactId c = event.getContactId();
|
||||||
|
connectionRecogniser.removeSecrets(c);
|
||||||
|
synchronized(KeyManagerImpl.this) {
|
||||||
|
removeAndEraseSecrets(c, oldSecrets);
|
||||||
|
removeAndEraseSecrets(c, currentSecrets);
|
||||||
|
removeAndEraseSecrets(c, newSecrets);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class TransportAddedTask extends TimerTask {
|
||||||
|
|
||||||
|
private final TransportAddedEvent event;
|
||||||
|
|
||||||
|
private TransportAddedTask(TransportAddedEvent event) {
|
||||||
|
this.event = event;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
synchronized(KeyManagerImpl.this) {
|
||||||
|
maxLatencies.put(event.getTransportId(), event.getMaxLatency());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class TransportRemovedTask extends TimerTask {
|
||||||
|
|
||||||
|
private TransportRemovedEvent event;
|
||||||
|
|
||||||
|
private TransportRemovedTask(TransportRemovedEvent event) {
|
||||||
|
this.event = event;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
TransportId t = event.getTransportId();
|
||||||
|
connectionRecogniser.removeSecrets(t);
|
||||||
|
synchronized(KeyManagerImpl.this) {
|
||||||
|
maxLatencies.remove(t);
|
||||||
|
removeAndEraseSecrets(t, oldSecrets);
|
||||||
|
removeAndEraseSecrets(t, currentSecrets);
|
||||||
|
removeAndEraseSecrets(t, newSecrets);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user