diff --git a/net-mqtt.cabal b/net-mqtt.cabal
--- a/net-mqtt.cabal
+++ b/net-mqtt.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           net-mqtt
-version:        0.8.7.1
+version:        0.8.7.2
 synopsis:       An MQTT Protocol Implementation.
 description:    Please see the README on GitHub at <https://github.com/dustin/mqtt-hs#readme>
 category:       Network
diff --git a/src/Network/MQTT/Client.hs b/src/Network/MQTT/Client.hs
--- a/src/Network/MQTT/Client.hs
+++ b/src/Network/MQTT/Client.hs
@@ -338,10 +338,11 @@
     clientThread cli = E.finally connectAndRun markDisco
       where
         connectAndRun = mkconn $ \ad -> start cli ad >>= run ad
-        markDisco = atomically $ do
-          st <- readTVar (_st cli)
-          guard $ st == Starting || st == Connected
-          writeTVar (_st cli) Disconnected
+        markDisco = atomically $
+          modifyTVar' (_st cli) $ \case
+            Starting -> Disconnected
+            Connected -> Disconnected
+            x -> x
 
     start c (_,sink) = do
       void . runConduit $ do
