[Haskell-cafe] Spurious program crashes

Joel Reymont joelr1 at gmail.com
Wed Nov 16 13:16:48 EST 2005


I really don't use more FFI than needed to send and receive binary  
packets over the network. I don't even use FPS these days and all the  
allocaBytes code checks for nullPtr.

My hunch is that this is to do with killing threads that perform FFI  
in my timeout code. It would kill blocking connect and hGet  
operations for example.

timeout :: forall a.Show a => Int -> IO a -> IO a
timeout secs fun =
     do mvar <- newEmptyMVar
        tid1 <- forkIO $ do result <- try fun
                            putMVar mvar $
                                    either (Left . show) (Right . id)
                                            result
        tid2 <- forkIO $ do threadDelay (secs * 1000000)
                            putMVar mvar (Left "timeout")
        maybeResult <- takeMVar mvar
        forkIO $ do killThread tid1
                    killThread tid2
        case maybeResult of
          Right a -> return a
          Left b -> fail b

On Nov 16, 2005, at 5:52 PM, Tomasz Zielonka wrote:

> Let me guess - excessive use of unsafe operations (like unsafe*, FFI)?
> I've got an impression that you use them too often for a fresh Haskell
> programmer. Too often for a Haskell programmer in general.

--
http://wagerlabs.com/







More information about the Haskell-Cafe mailing list