
On Thu, Apr 23, 2015 at 07:27:08PM +0200, Martijn Rijkeboer wrote:
pollSockets :: State -> IO () pollSockets state = void $ poll (-1) [ Sock (listenSocket state) [In] (Just $ observerHandleEvts state) , Sock (snapSocket state) [In] (Just $ snapshotHandleEvts state) ]
observerHandleEvts :: State -> [Event] -> IO () observerHandleEvts state _ = do void $ receiveMulti $ listenSocket state pollSockets state
snapshotHandleEvts :: State -> [Event] -> IO () snapshotHandleEvts state _ = do void $ receiveMulti $ snapSocket state pollSockets state
What happens here if there is an event waiting on both the listen socket *and* the snap socket? It looks like `observerHandleEvts` will be called and, since it recursively calles `pollSockets`, the `snapshotHandleEvts` handler will not be run, although its continuation will be kept around leaking space. It seems unwise to make a recursive call to the event loop inside a handler. Tom