git.iko.soy/distributed-process
on master help sign in
Create new unique when reaching maxBound
8b5722cEdsko de Vries
distributed-process/src/Control/Distributed/Process/Node.hs+15−6
@@ -182,12 +182,21 @@ forkProcess node proc = modifyMVar (localState node) $ \st -> do
182 }
182 }
183 return (tid', lproc)
183 return (tid', lproc)
184
184
185− -- TODO: if the counter overflows we should pick a new unique
185+ if lpidCounter lpid == maxBound
186+ then do
187+ newUnique <- randomIO
188+ return ( (localProcessWithId lpid ^= Just lproc)
189+ . (localPidCounter ^= 0)
190+ . (localPidUnique ^= newUnique)
191+ $ st
192+ , pid
193+ )
194+ else
186− return ( (localProcessWithId lpid ^= Just lproc)
195+ return ( (localProcessWithId lpid ^= Just lproc)
187− . (localPidCounter ^: (+ 1))
196+ . (localPidCounter ^: (+ 1))
188− $ st
197+ $ st
189− , pid
198+ , pid
190− )
199+ )
191
200
192handleIncomingMessages :: LocalNode -> IO ()
201handleIncomingMessages :: LocalNode -> IO ()
193handleIncomingMessages node = go [] Map.empty Map.empty Set.empty
202handleIncomingMessages node = go [] Map.empty Map.empty Set.empty