Callbacks to embedding or extension code sometimes need to block a thread, but blocking must allow other threads to execute. This is implemented by using scheme_block_until. This procedure takes two functions: a function that tests whether blocking is done, and a function that sets bits in fd_sets when MzScheme decides to sleep.