git.iko.soy/distributed-process
on master help sign in
Better 'copy' in payloadToMessage
commit2aaabdce887efcfe9d022cb98a80224656e92b58 authorEdsko de Vries <edsko@edsko.net> dateTue 2 Oct 2012, 13:01 (14 years ago) parentac068d2
1 file changed+12−4
distributed-process/src/Control/Distributed/Process/Internal/Types.hs+12−4
distributed-process/src/Control/Distributed/Process/Internal/Types.hs+12−4
@@ -69,14 +69,14 @@ import Data.Map (Map)
6969import Data.Int (Int32)
7070import Data.Typeable (Typeable)
7171import Data.Binary (Binary(put, get), putWord8, getWord8, encode)
72−import qualified Data.ByteString as BSS (ByteString, concat)
72+import qualified Data.ByteString as BSS (ByteString, concat, copy)
7373import qualified Data.ByteString.Lazy as BSL
7474 ( ByteString
7575 , toChunks
7676 , splitAt
7777 , fromChunks
78− , copy
7978 )
79+import qualified Data.ByteString.Lazy.Internal as BSL (ByteString(..))
8080import Data.Accessor (Accessor, accessor)
8181import Control.Category ((>>>))
8282import Control.Exception (Exception)
@@ -294,12 +294,20 @@ messageToPayload (Message fp enc) = encodeFingerprint fp : BSL.toChunks enc
294294
295295-- | Deserialize a message
296296payloadToMessage :: [BSS.ByteString] -> Message
297−payloadToMessage payload = Message fp (BSL.copy msg)
297+payloadToMessage payload = Message fp (copy msg)
298298 where
299+ encFp :: BSL.ByteString
300+ msg :: BSL.ByteString
299301 (encFp, msg) = BSL.splitAt (fromIntegral sizeOfFingerprint)
300302 $ BSL.fromChunks payload
303+
304+ fp :: Fingerprint
301305 fp = decodeFingerprint . BSS.concat . BSL.toChunks $ encFp
302306
307+ copy :: BSL.ByteString -> BSL.ByteString
308+ copy (BSL.Chunk bs BSL.Empty) = BSL.Chunk (BSS.copy bs) BSL.Empty
309+ copy bsl = BSL.fromChunks . return . BSS.concat . BSL.toChunks $ bsl
310+
303311--------------------------------------------------------------------------------
304312-- Node controller user-visible data types --
305313--------------------------------------------------------------------------------
@@ -410,7 +418,7 @@ data ProcessSignal =
410418 | Died Identifier !DiedReason
411419 | Spawn !(Closure (Process ())) !SpawnRef
412420 | WhereIs !String
413− | Register !String !(Maybe ProcessId) -- Nothing to unregister
421+ | Register !String !(Maybe ProcessId) -- Use 'Nothing' to unregister
414422 | NamedSend !String !Message
415423 deriving Show
416424