Maybe it's because the PacketCollector isn't canceled, after usage, i.e.
try {
packetCollector = createPacketCollectorAndSend(newStanzaIdFilter(session), session);
packetCollector.nextResultOrThrow();
} finally {
packetCollector.cancel();
}
Just a vague idea, maybe too far fetched...