@@ -182,12 +182,21 @@ forkProcess node proc = modifyMVar (localState node) $ \st -> do
182182 }
183183 return (tid', lproc)
184184
185− -- TODO: if the counter overflows we should pick a new unique
186− return ( (localProcessWithId lpid ^= Just lproc)
187− . (localPidCounter ^: (+ 1))
188− $ st
189− , pid
190− )
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
195+ return ( (localProcessWithId lpid ^= Just lproc)
196+ . (localPidCounter ^: (+ 1))
197+ $ st
198+ , pid
199+ )
191200
192201handleIncomingMessages :: LocalNode -> IO ()
193202handleIncomingMessages node = go [] Map.empty Map.empty Set.empty