Backport Memleak fix described in [1] and outlined in [2]. The 3.3.0
Smask CQ #7367 [3] has been updated to indicate that we backported this
fix.

[1] http://issues.igniterealtime.org/browse/SMACK-441
[2]
http://fisheye.igniterealtime.org/viewrep/smack/branches/smack_3_3_1/source/org/jivesoftware/smack/keepalive/KeepAliveManager.java?r1=13657&r2=13703
[3] https://dev.eclipse.org/ipzilla/show_bug.cgi?id=7367
diff --git a/protocols/bundles/org.jivesoftware.smack/src/org/jivesoftware/smack/keepalive/KeepAliveManager.java b/protocols/bundles/org.jivesoftware.smack/src/org/jivesoftware/smack/keepalive/KeepAliveManager.java
index dea49b8..5246896 100644
--- a/protocols/bundles/org.jivesoftware.smack/src/org/jivesoftware/smack/keepalive/KeepAliveManager.java
+++ b/protocols/bundles/org.jivesoftware.smack/src/org/jivesoftware/smack/keepalive/KeepAliveManager.java
@@ -276,10 +276,10 @@
                 public void run() {
                     Ping ping = new Ping();
                     PacketFilter responseFilter = new PacketIDFilter(ping.getPacketID());
-                    final PacketCollector response = connection.createPacketCollector(responseFilter);
+                    final PacketCollector response = pingFailedListeners.isEmpty() ? null : connection.createPacketCollector(responseFilter);
                     connection.sendPacket(ping);
         
-                    if (!pingFailedListeners.isEmpty()) {
+                    if (response != null) {
                         // Schedule a collector for the ping reply, notify listeners if none is received.
                         periodicPingExecutorService.schedule(new Runnable() {
                             @Override