From 4dfb2b08fad982ad760ed6e1ae56a43ebee809d1 Mon Sep 17 00:00:00 2001 From: Gaston Dombiak Date: Tue, 13 Jan 2004 18:13:23 +0000 Subject: [PATCH] Fixes a problem that didn't allow to terminate daemon threads git-svn-id: http://svn.igniterealtime.org/svn/repos/smack/trunk@2205 b35dd754-fafc-0310-a699-88a17e54d16e --- .../org/jivesoftware/smack/PacketWriter.java | 42 ++++++++++++------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/source/org/jivesoftware/smack/PacketWriter.java b/source/org/jivesoftware/smack/PacketWriter.java index 455a3df16..ba666aa5c 100644 --- a/source/org/jivesoftware/smack/PacketWriter.java +++ b/source/org/jivesoftware/smack/PacketWriter.java @@ -172,13 +172,18 @@ class PacketWriter { */ private Packet nextPacket() { synchronized(queue) { - while (queue.size() == 0) { + while (!done && queue.size() == 0) { try { - queue.wait(); + queue.wait(2000); } catch (InterruptedException ie) { } } - return (Packet)queue.removeLast(); + if (queue.size() > 0) { + return (Packet)queue.removeLast(); + } + else { + return null; + } } } @@ -196,8 +201,10 @@ class PacketWriter { // Write out packets from the queue. while (!done) { Packet packet = nextPacket(); - writer.write(packet.toXML()); - writer.flush(); + if (packet != null) { + writer.write(packet.toXML()); + writer.flush(); + } } // Close the stream. try { @@ -228,20 +235,27 @@ class PacketWriter { Packet sentPacket; // Wait until a new packet has been sent synchronized(sentPackets) { - while (sentPackets.size() == 0) { + while (!done && sentPackets.size() == 0) { try { - sentPackets.wait(); + sentPackets.wait(2000); } catch (InterruptedException ie) { } } - sentPacket = (Packet)sentPackets.removeLast(); + if (sentPackets.size() > 0) { + sentPacket = (Packet)sentPackets.removeLast(); + } + else { + sentPacket = null; + } } - // Notify the listeners of the new sent packet - int size = listeners.size(); - for (int i=0; i