diff options
Diffstat (limited to 'src/com/isode/stroke/client/ClientSessionStanzaChannel.java')
-rw-r--r-- | src/com/isode/stroke/client/ClientSessionStanzaChannel.java | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/com/isode/stroke/client/ClientSessionStanzaChannel.java b/src/com/isode/stroke/client/ClientSessionStanzaChannel.java index 0aa024f..e8275a0 100644 --- a/src/com/isode/stroke/client/ClientSessionStanzaChannel.java +++ b/src/com/isode/stroke/client/ClientSessionStanzaChannel.java @@ -9,6 +9,7 @@ package com.isode.stroke.client; import com.isode.stroke.base.Error; +import com.isode.stroke.base.IDGenerator; import com.isode.stroke.elements.IQ; import com.isode.stroke.elements.Message; import com.isode.stroke.elements.Presence; @@ -26,7 +27,7 @@ import java.util.logging.Logger; * StanzaChannel implementation around a ClientSession. */ public class ClientSessionStanzaChannel extends StanzaChannel { - private final IDGenerator idGenerator = new IDGenerator(); + private IDGenerator idGenerator = new IDGenerator(); private ClientSession session; private static final Logger logger_ = Logger.getLogger(ClientSessionStanzaChannel.class.getName()); private SignalConnection sessionInitializedConnection; @@ -34,6 +35,21 @@ public class ClientSessionStanzaChannel extends StanzaChannel { private SignalConnection sessionStanzaReceivedConnection; private SignalConnection sessionStanzaAckedConnection; + protected void finalize() throws Throwable { + try { + if(session != null) { + sessionFinishedConnection.disconnect(); + sessionStanzaReceivedConnection.disconnect(); + sessionStanzaAckedConnection.disconnect(); + sessionInitializedConnection.disconnect(); + session = null; + } + } + finally { + super.finalize(); + } + } + public void setSession(final ClientSession session) { assert this.session == null; this.session = session; |