Maybe not the most helpful comment, but I can confirm that this works without problems on Linux. I only have to increase the buffer size to avoid underruns -- but has nothing to do with threads:on. In a more complex scenario, it's important to call `system.setupForeignGc()` at the top of the callback to get proper GC. But the saw_out example does not require GC in the callback, so won't help either.
To track down the problem it would be interesting to build a minimal C example which sets up a p-thread like portaudio does, and calls a callback. If this minimal example fails as well, we would at least have something clear to work on (=> issue tracker).