Hi, I am writing a smallish C extension for enabling parallel execution of user level code in form of callbacks and stuff. I would like to know, how I can have fine grained control over GL so as more than one native thread can run truely parallely. I searched the ML archives and came up with an explanation from ko1: rb_thread_blocking_region( rb_blocking_function_t *func, void *data1, rb_unblock_function_t *ubf, void *data2) func() is your function which you want to do without GL. YARV release GL and call func(). If func() returned, YARV acquire GL and continue ruby program. ubf (unblocking function) is called when another thread interrupts this thread with Thread#kill, or main thread exits. You must set ubf as interrupt function for func(). You must write ubf or ruby will not exit until func() ends. Can anybody elaborate more? -- Let them talk of their oriental summer climes of everlasting conservatories; give me the privilege of making my own summer with my own coals. http://gnufied.org