Feature #20750 » 11649-lenent-rb_thread_call_with_gvl.patch
thread.c | ||
---|---|---|
* created as Ruby thread (created by Thread.new or so). In other
|
||
* words, this function *DOES NOT* associate or convert a NON-Ruby
|
||
* thread to a Ruby thread.
|
||
*
|
||
* NOTE: If this thread has already aquired the GVL, then the method call
|
||
* is performed without acquiring or releasing the GVL.
|
||
*/
|
||
void *
|
||
rb_thread_call_with_gvl(void *(*func)(void *), void *data1)
|
||
... | ... | |
prev_unblock = th->unblock;
|
||
if (brb == 0) {
|
||
rb_bug("rb_thread_call_with_gvl: called by a thread which has GVL.");
|
||
/* the GVL is already acquired, call method directly */
|
||
return (*func)(data1);
|
||
}
|
||
blocking_region_end(th, brb);
|