
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.