I've been doing a lot more thinking on why runTask might have been making other things hang, and it's probably a long shot, but I'm wondering if runTask might not be yielding when I call a blocking function.

The documentation says "[The task] will continue to run until vibeYield() or any of the I/O or wait functions is called." One of the tasks has a stdout.readln() on a pipeProcess()'s stdout that it waits on, and the other waits on a UDPConnection.recv().

Any chance that the runTask framework would fail to yield when the task hits UDPConnection.recv() or pipeProcess().stdout.readln()?