I am writing a C extension for Ruby that wraps a networking API. I
want to be able to write a Ruby function that blocks the calling Ruby
thread until I get an asynchronous notification from the networking
API that a message has arrived. To do that, I would need a few extra
hooks into the thread scheduler in eval.c. The main one would be:
/* can be called asynchronously (in a different thread from the
* Ruby interpreter) */
rb_thread_async_wakeup(VALUE thread)
{
rb_thread_check(thread)->status = THREAD_RUNNABLE;
}
This should cause the thread scheduler to consider this thread for
running, the next time the scheduler runs.
What do you think? Could such a hook be integrated into the main
Ruby distribution?
Thanks,
Josh