1
0
Fork 0
mirror of https://codeberg.org/Mercury-IM/Smack synced 2024-11-16 12:12:06 +01:00

1) Use #notifyAll to notify all waiting threads on listenethread. SMACK-189

2) Added try/catch while notifying listener to recover gracefully from potential errors. SMACK-190

git-svn-id: http://svn.igniterealtime.org/svn/repos/smack/trunk@7043 b35dd754-fafc-0310-a699-88a17e54d16e
This commit is contained in:
Gaston Dombiak 2007-02-08 18:23:44 +00:00 committed by gato
parent 85dcb0a5c4
commit 2db477145d

View file

@ -185,7 +185,14 @@ class PacketReader {
// Make a copy since it's possible that a listener will be removed from the list // Make a copy since it's possible that a listener will be removed from the list
listenersCopy = new ArrayList<ConnectionListener>(connectionListeners); listenersCopy = new ArrayList<ConnectionListener>(connectionListeners);
for (ConnectionListener listener : listenersCopy) { for (ConnectionListener listener : listenersCopy) {
listener.connectionClosed(); try {
listener.connectionClosed();
}
catch (Exception e) {
// Cath and print any exception so we can recover
// from a faulty listener and finish the shutdown process
e.printStackTrace();
}
} }
} }
} }
@ -193,7 +200,7 @@ class PacketReader {
// Make sure that the listenerThread is awake to shutdown properly // Make sure that the listenerThread is awake to shutdown properly
synchronized (listenerThread) { synchronized (listenerThread) {
listenerThread.notify(); listenerThread.notifyAll();
} }
} }
@ -215,13 +222,20 @@ class PacketReader {
// Make a copy since it's possible that a listener will be removed from the list // Make a copy since it's possible that a listener will be removed from the list
listenersCopy = new ArrayList<ConnectionListener>(connectionListeners); listenersCopy = new ArrayList<ConnectionListener>(connectionListeners);
for (ConnectionListener listener : listenersCopy) { for (ConnectionListener listener : listenersCopy) {
listener.connectionClosedOnError(e); try {
listener.connectionClosedOnError(e);
}
catch (Exception e2) {
// Cath and print any exception so we can recover
// from a faulty listener
e2.printStackTrace();
}
} }
} }
// Make sure that the listenerThread is awake to shutdown properly // Make sure that the listenerThread is awake to shutdown properly
synchronized (listenerThread) { synchronized (listenerThread) {
listenerThread.notify(); listenerThread.notifyAll();
} }
} }
@ -235,13 +249,20 @@ class PacketReader {
// Make a copy since it's possible that a listener will be removed from the list // Make a copy since it's possible that a listener will be removed from the list
listenersCopy = new ArrayList<ConnectionListener>(connectionListeners); listenersCopy = new ArrayList<ConnectionListener>(connectionListeners);
for (ConnectionListener listener : listenersCopy) { for (ConnectionListener listener : listenersCopy) {
listener.reconnectionSuccessful(); try {
listener.reconnectionSuccessful();
}
catch (Exception e) {
// Cath and print any exception so we can recover
// from a faulty listener
e.printStackTrace();
}
} }
} }
// Make sure that the listenerThread is awake to shutdown properly // Make sure that the listenerThread is awake to shutdown properly
synchronized (listenerThread) { synchronized (listenerThread) {
listenerThread.notify(); listenerThread.notifyAll();
} }
} }