[Haskell-cafe] Problems with Network/MVar

Pierre-Étienne Meunier pierreetienne.meunier at gmail.com
Tue Apr 1 09:21:27 UTC 2014


Hello cafe,

I’m trying to run a server to synchronize a bunch of machines, and one of the threads keeps crashing every ~50 hours.

One of the threads is an HTTP server and stays alive forever, so it’s not a Unix signal problem.

I don’t have much information on its stdout/stderr, and the bug is not very reproducible, since it can happen even though very few of its maximum ~200 clients are connected.

Is there a reason why the following can stop after some time?


server::Config -> MVar State -> IO ()
server config state=withSocketsDo $ do
 installHandler sigPIPE Ignore Nothing
 threads<-Sem.new $ maxThreads config
 forever $ do
       E.catch (bracket (listenOn $ port config)) sClose $
              \sock->forever $ do
                    (s,a,_)<-accept sock
                    wait threads
                    forkIO $ (reply state s a)`finally`(signal threads)`E.catch`(\e->let _=e::IOException in return ())
          (\e->let _=e::IOException in return ())
       threadDelay 100000


This was compiled with GHC 7.6.3, -threaded and run on Debian Jessie (I have not tested other settings), and Config and State are both record types.

Thanks,
Pierre


More information about the Haskell-Cafe mailing list