Skip to content

Commit 15cb310

Browse files
committed
#7, remove a segfault cause by duplicating streaming computations
1 parent 8c0b113 commit 15cb310

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

Codec/Compression/Zlib/Internal.hs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,12 +78,14 @@ import Control.Monad (when)
7878
import Control.Exception (Exception, throw, assert)
7979
import Control.Monad.ST.Lazy hiding (stToIO)
8080
import Control.Monad.ST.Strict (stToIO)
81+
import Control.Monad.ST.Unsafe (unsafeIOToST)
8182
import Data.Typeable (Typeable)
8283
import qualified Data.ByteString.Lazy as L
8384
import qualified Data.ByteString.Lazy.Internal as L
8485
import qualified Data.ByteString as S
8586
import qualified Data.ByteString.Internal as S
8687
import Data.Word (Word8)
88+
import GHC.IO (noDuplicate)
8789

8890
import qualified Codec.Compression.Zlib.Stream as Stream
8991
import Codec.Compression.Zlib.Stream (Stream)
@@ -733,7 +735,7 @@ mkStateIO = stToIO Stream.mkState
733735

734736
runStreamST :: Stream a -> Stream.State s -> ST s (a, Stream.State s)
735737
runStreamIO :: Stream a -> Stream.State RealWorld -> IO (a, Stream.State RealWorld)
736-
runStreamST strm zstate = strictToLazyST (Stream.runStream strm zstate)
738+
runStreamST strm zstate = strictToLazyST (unsafeIOToST noDuplicate >> Stream.runStream strm zstate)
737739
runStreamIO strm zstate = stToIO (Stream.runStream strm zstate)
738740

739741
compressStreamIO :: Stream.Format -> CompressParams -> CompressStream IO

0 commit comments

Comments
 (0)