mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2024-11-21 22:02:06 +01:00
Set 'running' to false before calling notifyConnectionError()
Since the current variant of notifyConnectionError() does not execute most of its work in a new thread, especially since instantShutdown() is called in the invoking thread, we have to mark the connections reader or writer threads as no longer running prior them invoking notifyConnectionError(). Otherwise they will end up waiting for themselves to terminate.
This commit is contained in:
parent
884ee327e1
commit
c384849532
1 changed files with 6 additions and 0 deletions
|
@ -1129,6 +1129,9 @@ public class XMPPTCPConnection extends AbstractXMPPConnection {
|
||||||
// The exception can be ignored if the the connection is 'done'
|
// The exception can be ignored if the the connection is 'done'
|
||||||
// or if the it was caused because the socket got closed.
|
// or if the it was caused because the socket got closed.
|
||||||
if (!done) {
|
if (!done) {
|
||||||
|
// Set running to false since this thread will exit here and notifyConnectionError() will wait until
|
||||||
|
// the reader and writer thread's 'running' value is false.
|
||||||
|
running = false;
|
||||||
// Close the connection and notify connection listeners of the
|
// Close the connection and notify connection listeners of the
|
||||||
// error.
|
// error.
|
||||||
notifyConnectionError(e);
|
notifyConnectionError(e);
|
||||||
|
@ -1381,6 +1384,9 @@ public class XMPPTCPConnection extends AbstractXMPPConnection {
|
||||||
// The exception can be ignored if the the connection is 'done'
|
// The exception can be ignored if the the connection is 'done'
|
||||||
// or if the it was caused because the socket got closed
|
// or if the it was caused because the socket got closed
|
||||||
if (!(done() || queue.isShutdown())) {
|
if (!(done() || queue.isShutdown())) {
|
||||||
|
// Set running to false since this thread will exit here and notifyConnectionError() will wait until
|
||||||
|
// the reader and writer thread's 'running' value is false.
|
||||||
|
running = false;
|
||||||
notifyConnectionError(e);
|
notifyConnectionError(e);
|
||||||
} else {
|
} else {
|
||||||
LOGGER.log(Level.FINE, "Ignoring Exception in writePackets()", e);
|
LOGGER.log(Level.FINE, "Ignoring Exception in writePackets()", e);
|
||||||
|
|
Loading…
Reference in a new issue