git.iko.soy/distributed-process
on master help sign in
bury ProcessExitException as far away from users as possible
c88c5c0Tim Watson
distributed-process/src/Control/Distributed/Process/Internal/Primitives.hs+2−18
@@ -29,7 +29,7 @@ module Control.Distributed.Process.Internal.Primitives
29 , kill
29 , kill
30 , exit
30 , exit
31 , catchExit
31 , catchExit
32− , ProcessExitException(..)
32+ , ProcessExitException()
33 , getSelfPid
33 , getSelfPid
34 , getSelfNode
34 , getSelfNode
35 , ProcessInfo(..)
35 , ProcessInfo(..)
@@ -139,6 +139,7 @@ import Control.Distributed.Process.Internal.Types
139 , TypedChannel(..)
139 , TypedChannel(..)
140 , SendPortId(..)
140 , SendPortId(..)
141 , Identifier(..)
141 , Identifier(..)
142+ , ProcessExitException(..)
142 , DidUnmonitor(..)
143 , DidUnmonitor(..)
143 , DidUnlinkProcess(..)
144 , DidUnlinkProcess(..)
144 , DidUnlinkNode(..)
145 , DidUnlinkNode(..)
@@ -370,23 +371,6 @@ exit :: Serializable a => ProcessId -> a -> Process ()
370-- 'monitor' or 'link' request.
371-- 'monitor' or 'link' request.
371exit them reason = sendCtrlMsg Nothing (Exit them (createMessage reason))
372exit them reason = sendCtrlMsg Nothing (Exit them (createMessage reason))
372
373
373−-- | Internal exception thrown indirectly by 'exit'
374−data ProcessExitException =
375− ProcessExitException !ProcessId !Message
376− deriving Typeable
377−
378−instance Exception ProcessExitException
379−instance Show ProcessExitException where
380− show = showProcessExit
381−
382−showProcessExit :: ProcessExitException -> String
383−showProcessExit (ProcessExitException pid reason) =
384− case messageFingerprint reason == fingerprint (undefined :: String) of
385− True -> "origin=" ++ (show pid) ++ ",reason=" ++ decoded
386− False -> "origin=" ++ show pid
387− where decoded :: String
388− !decoded = decode (messageEncoding reason)
389−
390-- | Catches ProcessExitException
374-- | Catches ProcessExitException
391catchExit :: forall a b . (Show a, Serializable a)
375catchExit :: forall a b . (Show a, Serializable a)
392 => Process b
376 => Process b
distributed-process/src/Control/Distributed/Process/Internal/Types.hs+19−1
@@ -36,6 +36,7 @@ module Control.Distributed.Process.Internal.Types
36 , ProcessMonitorNotification(..)
36 , ProcessMonitorNotification(..)
37 , NodeMonitorNotification(..)
37 , NodeMonitorNotification(..)
38 , PortMonitorNotification(..)
38 , PortMonitorNotification(..)
39+ , ProcessExitException(..)
39 , ProcessLinkException(..)
40 , ProcessLinkException(..)
40 , NodeLinkException(..)
41 , NodeLinkException(..)
41 , PortLinkException(..)
42 , PortLinkException(..)
@@ -72,7 +73,7 @@ import System.Mem.Weak (Weak)
72import Data.Map (Map)
73import Data.Map (Map)
73import Data.Int (Int32)
74import Data.Int (Int32)
74import Data.Typeable (Typeable)
75import Data.Typeable (Typeable)
75−import Data.Binary (Binary(put, get), putWord8, getWord8, encode)
76+import Data.Binary (Binary(put, get), putWord8, getWord8, encode, decode)
76import qualified Data.ByteString as BSS (ByteString, concat, copy)
77import qualified Data.ByteString as BSS (ByteString, concat, copy)
77import qualified Data.ByteString.Lazy as BSL
78import qualified Data.ByteString.Lazy as BSL
78 ( ByteString
79 ( ByteString
@@ -370,6 +371,23 @@ data ProcessRegistrationException =
370 ProcessRegistrationException !String
371 ProcessRegistrationException !String
371 deriving (Typeable, Show)
372 deriving (Typeable, Show)
372
373
374+-- | Internal exception thrown indirectly by 'exit'
375+data ProcessExitException =
376+ ProcessExitException !ProcessId !Message
377+ deriving Typeable
378+
379+instance Exception ProcessExitException
380+instance Show ProcessExitException where
381+ show = showProcessExit
382+
383+showProcessExit :: ProcessExitException -> String
384+showProcessExit (ProcessExitException pid reason) =
385+ case messageFingerprint reason == fingerprint (undefined :: String) of
386+ True -> "origin=" ++ (show pid) ++ ",reason=" ++ decoded
387+ False -> "origin=" ++ show pid
388+ where decoded :: String
389+ !decoded = decode (messageEncoding reason)
390+
373instance Exception ProcessLinkException
391instance Exception ProcessLinkException
374instance Exception NodeLinkException
392instance Exception NodeLinkException
375instance Exception PortLinkException
393instance Exception PortLinkException
distributed-process/src/Control/Distributed/Process/Node.hs+1−1
@@ -112,6 +112,7 @@ import Control.Distributed.Process.Internal.Types
112 , ProcessMonitorNotification(..)
112 , ProcessMonitorNotification(..)
113 , NodeMonitorNotification(..)
113 , NodeMonitorNotification(..)
114 , PortMonitorNotification(..)
114 , PortMonitorNotification(..)
115+ , ProcessExitException(..)
115 , ProcessLinkException(..)
116 , ProcessLinkException(..)
116 , NodeLinkException(..)
117 , NodeLinkException(..)
117 , PortLinkException(..)
118 , PortLinkException(..)
@@ -152,7 +153,6 @@ import Control.Distributed.Process.Internal.Primitives
152 , receiveWait
153 , receiveWait
153 , match
154 , match
154 , sendChan
155 , sendChan
155− , ProcessExitException(..)
156 )
156 )
157import Control.Distributed.Process.Internal.Types (SendPort)
157import Control.Distributed.Process.Internal.Types (SendPort)
158import qualified Control.Distributed.Process.Internal.Closure.BuiltIn as BuiltIn (remoteTable)
158import qualified Control.Distributed.Process.Internal.Closure.BuiltIn as BuiltIn (remoteTable)
distributed-process/tests/TestCH.hs+1−2
@@ -4,7 +4,6 @@ module Main where
4import Prelude hiding (catch)
4import Prelude hiding (catch)
5#endif
5#endif
6
6
7−
8import Data.Binary (Binary(..))
7import Data.Binary (Binary(..))
9import Data.Typeable (Typeable)
8import Data.Typeable (Typeable)
10import Data.Foldable (forM_)
9import Data.Foldable (forM_)
@@ -31,9 +30,9 @@ import Control.Distributed.Process
31import Control.Distributed.Process.Internal.Types
30import Control.Distributed.Process.Internal.Types
32 ( NodeId(nodeAddress)
31 ( NodeId(nodeAddress)
33 , LocalNode(localEndPoint)
32 , LocalNode(localEndPoint)
33+ , ProcessExitException(..)
34 )
34 )
35import Control.Distributed.Process.Node
35import Control.Distributed.Process.Node
36−import Control.Distributed.Process.Internal.Primitives
37import Control.Distributed.Process.Serializable (Serializable)
36import Control.Distributed.Process.Serializable (Serializable)
38
37
39import Test.HUnit (Assertion)
38import Test.HUnit (Assertion)