X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=GHC%2FIO%2FHandle%2FInternals.hs;h=403407f0d9cd0f21342faedc37c42ac2847057f1;hb=7d39e10019df33f1a19d65b3c58c4d01a7dc8d30;hp=ed32eaa2b32cc5fad0d7902eae653a275b73d5f0;hpb=ccc931d0905f6e0d55cb90b045881d4515112411;p=ghc-base.git diff --git a/GHC/IO/Handle/Internals.hs b/GHC/IO/Handle/Internals.hs index ed32eaa..403407f 100644 --- a/GHC/IO/Handle/Internals.hs +++ b/GHC/IO/Handle/Internals.hs @@ -63,7 +63,6 @@ import qualified GHC.IO.BufferedIO as Buffered import GHC.Real import GHC.Base -import GHC.List import GHC.Exception import GHC.Num ( Num(..) ) import GHC.Show @@ -73,9 +72,8 @@ import Data.Typeable import Control.Monad import Data.Maybe import Foreign -import System.IO.Error +-- import System.IO.Error import System.Posix.Internals hiding (FD) -import qualified System.Posix.Internals as Posix #ifdef DEBUG_DUMP import Foreign.C @@ -207,7 +205,8 @@ checkWritableHandle act h_@Handle__{..} buf <- readIORef haCharBuffer writeIORef haCharBuffer buf{ bufState = WriteBuffer } buf <- readIORef haByteBuffer - writeIORef haByteBuffer buf{ bufState = WriteBuffer } + buf' <- Buffered.emptyWriteBuffer haDevice buf + writeIORef haByteBuffer buf' act h_ _other -> act h_ @@ -336,7 +335,7 @@ handleFinalizer fp m = do _ -> do flushWriteBuffer handle_ `catchAny` \_ -> return () -- ignore errors and async exceptions, and close the -- descriptor anyway... - hClose_handle_ handle_ + _ <- hClose_handle_ handle_ return () putMVar m (ioe_finalizedHandle fp) @@ -523,6 +522,7 @@ mkHandle dev filepath ha_type buffered mb_codec nl finalizer other_side = do haBuffers = spares, haEncoder = mb_encoder, haDecoder = mb_decoder, + haCodec = mb_codec, haInputNL = inputNL nl, haOutputNL = outputNL nl, haOtherSide = other_side @@ -706,8 +706,8 @@ writeTextDevice h_@Handle__{..} cbuf = do debugIO ("writeTextDevice after encoding: cbuf=" ++ summaryBuffer cbuf' ++ " bbuf=" ++ summaryBuffer bbuf') - Buffered.flushWriteBuffer haDevice bbuf' - writeIORef haByteBuffer bbuf{bufL=0,bufR=0} + bbuf' <- Buffered.flushWriteBuffer haDevice bbuf' + writeIORef haByteBuffer bbuf' if not (isEmptyBuffer cbuf') then writeTextDevice h_ cbuf' else return ()