move cleanup to end of message loop

This commit is contained in:
Vaci Koblizek 2020-10-24 16:51:16 +01:00
parent 94ca2a04e6
commit 86ccdd5a55

View file

@ -282,9 +282,9 @@ final class RpcState {
private final ReferenceQueue<Question> questionRefs = new ReferenceQueue<>();
private final ReferenceQueue<ImportClient> importRefs = new ReferenceQueue<>();
RpcState( Capability.Client bootstrapInterface,
VatNetwork.Connection connection,
CompletableFuture<java.lang.Void> onDisconnect) {
RpcState(Capability.Client bootstrapInterface,
VatNetwork.Connection connection,
CompletableFuture<java.lang.Void> onDisconnect) {
this.bootstrapInterface = bootstrapInterface;
this.connection = connection;
this.onDisconnect = onDisconnect;
@ -295,6 +295,10 @@ final class RpcState {
return this.messageLoop;
}
public CompletableFuture<java.lang.Void> onDisconnect() {
return this.messageLoop;
}
CompletableFuture<java.lang.Void> disconnect(Throwable exc) {
if (isDisconnected()) {
return CompletableFuture.failedFuture(this.disconnected);
@ -420,21 +424,20 @@ final class RpcState {
}
private CompletableFuture<java.lang.Void> doMessageLoop() {
this.cleanupImports();
this.cleanupQuestions();
if (isDisconnected()) {
return CompletableFuture.failedFuture(this.disconnected);
}
return connection.receiveIncomingMessage().thenCompose(message -> {
try {
handleMessage(message);
this.handleMessage(message);
} catch (Exception rpcExc) {
// either we received an Abort message from peer
// or internal RpcState is bad.
return this.disconnect(rpcExc);
}
this.cleanupImports();
this.cleanupQuestions();
return this.doMessageLoop();
}).exceptionallyCompose(exc -> this.disconnect(exc));