diff --git a/network-messagepack-rpc.cabal b/network-messagepack-rpc.cabal
--- a/network-messagepack-rpc.cabal
+++ b/network-messagepack-rpc.cabal
@@ -1,5 +1,5 @@
 name:                network-messagepack-rpc
-version:             0.1.1.1
+version:             0.1.1.2
 synopsis:            MessagePack RPC
 description:         [MessagePack RPC](https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md) library based on the "data-msgpack" package.
 homepage:            https://github.com/iij-ii/direct-hs/tree/master/network-messagepack-rpc
diff --git a/src/Network/MessagePack/RPC/Client.hs b/src/Network/MessagePack/RPC/Client.hs
--- a/src/Network/MessagePack/RPC/Client.hs
+++ b/src/Network/MessagePack/RPC/Client.hs
@@ -23,17 +23,12 @@
     )
 where
 
-import           Control.Concurrent      (ThreadId, forkFinally, forkIO,
-                                          killThread)
-import           Control.Concurrent.MVar (MVar)
+import           Control.Concurrent      (forkFinally, forkIO, killThread)
 import qualified Control.Concurrent.MVar as MVar
 import qualified Control.Exception.Safe  as E
 import           Control.Monad           (forever, void, when)
-import qualified Data.ByteString         as B
 import qualified Data.ByteString.Lazy    as BL
-import           Data.HashMap.Strict     (HashMap)
 import qualified Data.HashMap.Strict     as HM
-import           Data.IORef              (IORef)
 import qualified Data.IORef              as IORef
 import qualified Data.MessagePack        as MsgPack
 import           Data.Monoid             ((<>))
@@ -188,12 +183,12 @@
     tid <- forkFinally (receiverThread client config)
         $ \_ -> MVar.putMVar wait ()
     IORef.writeIORef tidref $ Just tid
-    takeAction client wait `E.finally` killThread tid
+    takeAction client wait
+        `E.finally` (backendClose backend >> killThread tid)
   where
     takeAction client wait = do
         returned <- action client
         when (waitRequestHandler config) $ MVar.takeMVar wait
-        backendClose backend
         return returned
 
 -- | This function cleans up the internal states including
