Skip to content

Commit 378acc2

Browse files
ndmitchelltolysz
authored andcommitted
#7, remove a segfault cause by duplicating streaming computations
1 parent 8d52231 commit 378acc2

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
@@ -79,12 +79,14 @@ import Control.Monad (when)
7979
import Control.Exception (Exception, throw, assert)
8080
import Control.Monad.ST.Lazy hiding (stToIO)
8181
import Control.Monad.ST.Strict (stToIO)
82+
import Control.Monad.ST.Unsafe (unsafeIOToST)
8283
import Data.Typeable (Typeable)
8384
import qualified Data.ByteString.Lazy as L
8485
import qualified Data.ByteString.Lazy.Internal as L
8586
import qualified Data.ByteString as S
8687
import qualified Data.ByteString.Internal as S
8788
import Data.Word (Word8)
89+
import GHC.IO (noDuplicate)
8890

8991
import qualified Codec.Compression.Zlib.Stream as Stream
9092
import Codec.Compression.Zlib.Stream (Stream)
@@ -738,7 +740,7 @@ mkStateIO = stToIO Stream.mkState
738740

739741
runStreamST :: Stream a -> Stream.State s -> ST s (a, Stream.State s)
740742
runStreamIO :: Stream a -> Stream.State RealWorld -> IO (a, Stream.State RealWorld)
741-
runStreamST strm zstate = strictToLazyST (Stream.runStream strm zstate)
743+
runStreamST strm zstate = strictToLazyST (unsafeIOToST noDuplicate >> Stream.runStream strm zstate)
742744
runStreamIO strm zstate = stToIO (Stream.runStream strm zstate)
743745

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

0 commit comments

Comments
 (0)