From e9f049adc92edc64a547b1d6b60a7c560803c42e Mon Sep 17 00:00:00 2001 From: Matt Tucker Date: Fri, 9 Mar 2007 02:02:27 +0000 Subject: [PATCH] Adding max queue size to throttle traffic (avoids OOM). (SMACK-208). git-svn-id: http://svn.igniterealtime.org/svn/repos/smack/trunk@7419 b35dd754-fafc-0310-a699-88a17e54d16e --- source/org/jivesoftware/smack/PacketWriter.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/source/org/jivesoftware/smack/PacketWriter.java b/source/org/jivesoftware/smack/PacketWriter.java index 6e0472e0f..fe6575f80 100644 --- a/source/org/jivesoftware/smack/PacketWriter.java +++ b/source/org/jivesoftware/smack/PacketWriter.java @@ -25,10 +25,10 @@ import org.jivesoftware.smack.packet.Packet; import java.io.IOException; import java.io.Writer; -import java.util.Queue; import java.util.Map; -import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; /** * Writes packets to a XMPP server. Packets are sent using a dedicated thread. Packet @@ -43,7 +43,7 @@ class PacketWriter { private Thread keepAliveThread; private Writer writer; private XMPPConnection connection; - private final Queue queue; + private final BlockingQueue queue; private boolean done; private final Map listeners = @@ -69,7 +69,7 @@ class PacketWriter { * @param connection the connection. */ protected PacketWriter(XMPPConnection connection) { - this.queue = new ConcurrentLinkedQueue(); + this.queue = new ArrayBlockingQueue(500, true); this.connection = connection; init(); } @@ -102,7 +102,13 @@ class PacketWriter { // may modify the content of the packet. processInterceptors(packet); - queue.add(packet); + try { + queue.put(packet); + } + catch (InterruptedException ie) { + ie.printStackTrace(); + return; + } synchronized (queue) { queue.notifyAll(); }