From 39ad426ca9afdf0a3c2fbc49cdde5ec7fd157f42 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Mon, 13 Jun 2016 19:06:09 +0200 Subject: [PATCH] remove messages from decryption queue when trimming a conversation --- .../crypto/PgpDecryptionService.java | 4 ++++ .../conversations/entities/Conversation.java | 19 +++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/crypto/PgpDecryptionService.java b/src/main/java/eu/siacs/conversations/crypto/PgpDecryptionService.java index 2bc270c15..0a34ba176 100644 --- a/src/main/java/eu/siacs/conversations/crypto/PgpDecryptionService.java +++ b/src/main/java/eu/siacs/conversations/crypto/PgpDecryptionService.java @@ -50,6 +50,10 @@ public class PgpDecryptionService { continueDecryption(); } + public synchronized void discard(List discards) { + this.messages.removeAll(discards); + } + protected synchronized void decryptNext() { if (pendingIntent == null && getOpenPgpApi() != null diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index 182e86ddf..94502d24a 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -22,6 +22,7 @@ import java.util.Iterator; import java.util.List; import eu.siacs.conversations.Config; +import eu.siacs.conversations.crypto.PgpDecryptionService; import eu.siacs.conversations.crypto.axolotl.AxolotlService; import eu.siacs.conversations.xmpp.chatstate.ChatState; import eu.siacs.conversations.xmpp.jid.InvalidJidException; @@ -206,7 +207,13 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl final int size = messages.size(); final int maxsize = Config.PAGE_SIZE * Config.MAX_NUM_PAGES; if (size > maxsize) { - this.messages.subList(0, size - maxsize).clear(); + List discards = this.messages.subList(0, size - maxsize); + final PgpDecryptionService pgpDecryptionService = account.getPgpDecryptionService(); + if (pgpDecryptionService != null) { + pgpDecryptionService.discard(discards); + } + discards.clear(); + untieMessages(); } } } @@ -949,9 +956,13 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl } } }); - for(Message message : this.messages) { - message.untie(); - } + untieMessages(); + } + } + + private void untieMessages() { + for(Message message : this.messages) { + message.untie(); } }