diff --git a/GHC/Handle.hs b/GHC/Handle.hs
index 261c81c53a69ea801f703c5d19401f64a32c0276..263b86d1275202469211918a05500ccc8b9aa92c 100644
--- a/GHC/Handle.hs
+++ b/GHC/Handle.hs
@@ -1158,6 +1158,7 @@ hClose_handle_ handle_ = do
 
     -- free the spare buffers
     writeIORef (haBuffers handle_) BufferListNil
+    writeIORef (haBuffer  handle_) noBuffer
   
 #ifndef mingw32_HOST_OS
     -- unlock it
@@ -1170,6 +1171,9 @@ hClose_handle_ handle_ = do
   		     haType      = ClosedHandle
   		   })
 
+{-# NOINLINE noBuffer #-}
+noBuffer = unsafePerformIO $ allocateBuffer 1 ReadBuffer
+
 -----------------------------------------------------------------------------
 -- Detecting and changing the size of a file