From 7a3ca4fd68e51d72c9cb5370e61a5c6ea8ea1a4f Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Wed, 27 May 2015 22:44:27 +0200 Subject: [PATCH] Fix memory leak caused by RosterGroup SMACK-672 --- .../smack/roster/RosterGroup.java | 21 ++++++------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/smack-im/src/main/java/org/jivesoftware/smack/roster/RosterGroup.java b/smack-im/src/main/java/org/jivesoftware/smack/roster/RosterGroup.java index f80f472d9..db2edf801 100644 --- a/smack-im/src/main/java/org/jivesoftware/smack/roster/RosterGroup.java +++ b/smack-im/src/main/java/org/jivesoftware/smack/roster/RosterGroup.java @@ -23,7 +23,7 @@ import java.util.List; import java.util.Locale; import java.util.Set; -import org.jivesoftware.smack.PacketCollector; +import org.jivesoftware.smack.Manager; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.SmackException.NoResponseException; import org.jivesoftware.smack.SmackException.NotConnectedException; @@ -38,10 +38,9 @@ import org.jxmpp.util.XmppStringUtils; * @see Roster#getGroup(String) * @author Matt Tucker */ -public class RosterGroup { +public class RosterGroup extends Manager { private final String name; - private final XMPPConnection connection; private final Set entries; /** @@ -51,8 +50,8 @@ public class RosterGroup { * @param connection the connection the group belongs to. */ RosterGroup(String name, XMPPConnection connection) { + super(connection); this.name = name; - this.connection = connection; entries = new LinkedHashSet(); } @@ -85,7 +84,7 @@ public class RosterGroup { item.removeGroupName(this.name); item.addGroupName(name); packet.addRosterItem(item); - connection.createPacketCollectorAndSend(packet).nextResultOrThrow(); + connection().createPacketCollectorAndSend(packet).nextResultOrThrow(); } } } @@ -171,7 +170,6 @@ public class RosterGroup { * @throws NotConnectedException */ public void addEntry(RosterEntry entry) throws NoResponseException, XMPPErrorException, NotConnectedException { - PacketCollector collector = null; // Only add the entry if it isn't already in the list. synchronized (entries) { if (!entries.contains(entry)) { @@ -181,12 +179,9 @@ public class RosterGroup { item.addGroupName(getName()); packet.addRosterItem(item); // Wait up to a certain number of seconds for a reply from the server. - collector = connection.createPacketCollectorAndSend(packet); + connection().createPacketCollectorAndSend(packet).nextResultOrThrow(); } } - if (collector != null) { - collector.nextResultOrThrow(); - } } /** @@ -202,7 +197,6 @@ public class RosterGroup { * @throws NotConnectedException */ public void removeEntry(RosterEntry entry) throws NoResponseException, XMPPErrorException, NotConnectedException { - PacketCollector collector = null; // Only remove the entry if it's in the entry list. // Remove the entry locally, if we wait for RosterPacketListenerprocess>>Packet(Packet) // to take place the entry will exist in the group until a packet is received from the @@ -215,12 +209,9 @@ public class RosterGroup { item.removeGroupName(this.getName()); packet.addRosterItem(item); // Wait up to a certain number of seconds for a reply from the server. - collector = connection.createPacketCollectorAndSend(packet); + connection().createPacketCollectorAndSend(packet).nextResultOrThrow(); } } - if (collector != null) { - collector.nextResultOrThrow(); - } } void addEntryLocal(RosterEntry entry) {