From 06b2ea1e8a19f754557ed21ceed24f88033950b9 Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Thu, 19 Apr 2018 23:03:26 +0200
Subject: [PATCH] Close connection cleanly

---
 .../quasseldroid/service/QuasselService.kt     | 18 +++++++++++-------
 .../libquassel/connection/CoreConnection.kt    | 12 ++++++------
 .../libquassel/util/nio/WrappedChannel.kt      |  1 +
 3 files changed, 18 insertions(+), 13 deletions(-)

diff --git a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt
index 4a41bfaef..7a96a7c50 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt
@@ -276,8 +276,10 @@ class QuasselService : DaggerLifecycleService(),
       .throttleFirst(1, TimeUnit.SECONDS)
       .toLiveData()
       .observe(this, Observer {
-        if (wasEverConnected && !sessionManager.hasErrored)
-          sessionManager.reconnect(true)
+        handlerService.backend {
+          if (wasEverConnected && !sessionManager.hasErrored)
+            sessionManager.reconnect(true)
+        }
       })
 
     sessionManager.state
@@ -287,11 +289,13 @@ class QuasselService : DaggerLifecycleService(),
       .toLiveData()
       .observe(
         this, Observer {
-        if (it == ConnectionState.DISCONNECTED || it == ConnectionState.CLOSED) {
-          if (wasEverConnected && !sessionManager.hasErrored)
-            sessionManager.reconnect()
-        } else {
-          wasEverConnected = true
+        handlerService.backend {
+          if (it == ConnectionState.DISCONNECTED || it == ConnectionState.CLOSED) {
+            if (wasEverConnected && !sessionManager.hasErrored)
+              sessionManager.reconnect()
+          } else {
+            wasEverConnected = true
+          }
         }
       })
 
diff --git a/lib/src/main/java/de/kuschku/libquassel/connection/CoreConnection.kt b/lib/src/main/java/de/kuschku/libquassel/connection/CoreConnection.kt
index 83755afa7..e8b28e00a 100644
--- a/lib/src/main/java/de/kuschku/libquassel/connection/CoreConnection.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/connection/CoreConnection.kt
@@ -127,10 +127,11 @@ class CoreConnection(
   override fun close() {
     try {
       setState(ConnectionState.CLOSED)
+      channel?.flush()
+      channel?.close()
       interrupt()
     } catch (e: Throwable) {
-      log(WARN,
-          TAG, "Error encountered while closing connection", e)
+      log(WARN, TAG, "Error encountered while closing connection", e)
     }
   }
 
@@ -200,14 +201,13 @@ class CoreConnection(
           }
         }
       }
+      channel?.close()
     } catch (e: QuasselSecurityException) {
       close()
       securityExceptionCallback(e)
     } catch (e: Throwable) {
-      log(WARN,
-          TAG, "Error encountered in connection", e)
-      log(WARN,
-          TAG, "Last sent message: ${MessageRunnable.lastSent.get()}")
+      log(WARN, TAG, "Error encountered in connection", e)
+      log(WARN, TAG, "Last sent message: ${MessageRunnable.lastSent.get()}")
       close()
     }
   }
diff --git a/lib/src/main/java/de/kuschku/libquassel/util/nio/WrappedChannel.kt b/lib/src/main/java/de/kuschku/libquassel/util/nio/WrappedChannel.kt
index 79f2c76b6..a7bd8957d 100644
--- a/lib/src/main/java/de/kuschku/libquassel/util/nio/WrappedChannel.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/util/nio/WrappedChannel.kt
@@ -186,6 +186,7 @@ class WrappedChannel(
     rawIn = null
     rawOut?.close()
     rawOut = null
+    socket.close()
   }
 
   /**
-- 
GitLab