Am 22.09.2014 06:51, schrieb Fred Douglas:

Ok, final update for the time being: it was in fact the case that whenever I was waiting on the stdin readln() or UDP recv() mentioned above, listenTCP couldn't accept connections and Mongo operations wouldn't go through.

That makes sense indeed. In case of the stdin access, you could use
vibe.stream.stdio.StdFileStream to wrap the blocking stream into a
non-blocking vibe.d stream. UDP recv (the vibe.d one) on the other
hand should be fine to use, as it yields control back to the event
loop when waiting.

Unfortunately there is no reliable way to detect when an incompatible
blocking function is called. Maybe it would make sense to add some kind
of watchdog thread in debug mode that outputs a message when any thread
running an event loop is blocked for more than, say, a second, and
prints out the call stack of that thread.