From 334cfd8c3ae8dc9c456d8dd60f982a8b1aa3c3c2 Mon Sep 17 00:00:00 2001 From: Matt Tucker Date: Wed, 20 Aug 2003 16:29:46 +0000 Subject: [PATCH] Fix connection closing notifications on error. git-svn-id: http://svn.igniterealtime.org/svn/repos/smack/trunk@2050 b35dd754-fafc-0310-a699-88a17e54d16e --- .../org/jivesoftware/smack/PacketReader.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/source/org/jivesoftware/smack/PacketReader.java b/source/org/jivesoftware/smack/PacketReader.java index 61ee8c6ef..0dec348cd 100644 --- a/source/org/jivesoftware/smack/PacketReader.java +++ b/source/org/jivesoftware/smack/PacketReader.java @@ -200,14 +200,16 @@ class PacketReader { * Shuts the packet reader down. */ public void shutdown() { - done = true; - // Notify connection listeners of the connection closing. - synchronized (connectionListeners) { - for (Iterator i=connectionListeners.iterator(); i.hasNext(); ) { - ConnectionListener listener = (ConnectionListener)i.next(); - listener.connectionClosed(); + // Notify connection listeners of the connection closing if done hasn't already been set. + if (!done) { + synchronized (connectionListeners) { + for (Iterator i=connectionListeners.iterator(); i.hasNext(); ) { + ConnectionListener listener = (ConnectionListener)i.next(); + listener.connectionClosed(); + } } } + done = true; } /** @@ -287,15 +289,18 @@ class PacketReader { } catch (Exception e) { if (!done) { + // Set done to true since we want to do our own notification of connection closing. + done = true; + connection.close(); // An exception occurred while parsing. Notify connection listeners of // the error and close the connection. - connection.close(); synchronized (connectionListeners) { for (Iterator i=connectionListeners.iterator(); i.hasNext(); ) { ConnectionListener listener = (ConnectionListener)i.next(); listener.connectionClosedOnError(e); } } + } } }