properly jump out of connection loop on state changing errors

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java | 15 ++--
1 file changed, 7 insertions(+), 8 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java 🔗

@@ -346,9 +346,8 @@ public class XmppConnection implements Runnable {
 
                             if (!tlsFactoryVerifier.verifier.verify(account.getServer(), verifiedHostname, ((SSLSocket) localSocket).getSession())) {
                                 Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": TLS certificate verification failed");
-                                if (!iterator.hasNext()) {
-                                    throw new StateChangingException(Account.State.TLS_ERROR);
-                                }
+                                FileBackend.close(localSocket);
+                                throw new StateChangingException(Account.State.TLS_ERROR);
                             }
                         }
                         localSocket.setSoTimeout(Config.SOCKET_TIMEOUT * 1000);
@@ -359,13 +358,13 @@ public class XmppConnection implements Runnable {
                             }
                             break; // successfully connected to server that speaks xmpp
                         } else {
-                            localSocket.close();
-                            if (!iterator.hasNext()) {
-                                throw new StateChangingException(Account.State.STREAM_OPENING_ERROR);
-                            }
+                            FileBackend.close(localSocket);
+                            throw new StateChangingException(Account.State.STREAM_OPENING_ERROR);
                         }
                     } catch (final StateChangingException e) {
-                        throw e;
+                        if (!iterator.hasNext()) {
+                            throw e;
+                        }
                     } catch (InterruptedException e) {
                         Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": thread was interrupted before beginning stream");
                         return;