diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## Version 2.6.3.6
+ * Removed unnecessary withMVar, which caused locking on close.
+   [#330](https://github.com/haskell/network/pull/330)
+
 ## Version 2.6.3.5
  * Reverting "Do not closeFd within sendFd"
    [#271](https://github.com/haskell/network/pull/271)
diff --git a/Network/Socket.hsc b/Network/Socket.hsc
--- a/Network/Socket.hsc
+++ b/Network/Socket.hsc
@@ -578,7 +578,8 @@
        -> IO (Socket,                   -- Readable Socket
               SockAddr)                 -- Peer details
 
-accept sock@(MkSocket s family stype protocol status) = withMVar status $ \currentStatus -> do
+accept sock@(MkSocket s family stype protocol status) = do
+ currentStatus <- readMVar status
  if not $ isAcceptable family stype currentStatus
    then
      ioError $ userError $
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
@@ -1,4 +1,4 @@
-AC_INIT([Haskell network package], [2.6.3.5], [libraries@haskell.org], [network])
+AC_INIT([Haskell network package], [2.6.3.6], [libraries@haskell.org], [network])
 
 ac_includes_default="$ac_includes_default
 #ifdef HAVE_SYS_SOCKET_H
@@ -101,7 +101,7 @@
 fi
 
 dnl --------------------------------------------------
-dnl * test for GETPEEREID(3) 
+dnl * test for GETPEEREID(3)
 dnl --------------------------------------------------
 AC_MSG_CHECKING(for getpeereid in unistd.h)
 AC_CHECK_FUNC( getpeereid, AC_DEFINE([HAVE_GETPEEREID], [1], [Define to 1 if you have getpeereid.] ))
diff --git a/network.cabal b/network.cabal
--- a/network.cabal
+++ b/network.cabal
@@ -1,5 +1,5 @@
 name:           network
-version:        2.6.3.5
+version:        2.6.3.6
 license:        BSD3
 license-file:   LICENSE
 maintainer:     Kazu Yamamoto, Evan Borden
