ruby-changes:25342
From: drbrain <ko1@a...>
Date: Wed, 31 Oct 2012 09:29:47 +0900 (JST)
Subject: [ruby-changes:25342] drbrain:r37394 (trunk): * thread.c (rb_thread_call_without_gvl2): Note that ubf() may or may
drbrain 2012-10-31 09:29:27 +0900 (Wed, 31 Oct 2012) New Revision: 37394 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=37394 Log: * thread.c (rb_thread_call_without_gvl2): Note that ubf() may or may not be called with the GVL. Hinted that rb_thread_call_with_gvl() can be used to access ruby functionality. [ruby-trunk - #6433] Modified files: trunk/ChangeLog trunk/thread.c Index: ChangeLog =================================================================== --- ChangeLog (revision 37393) +++ ChangeLog (revision 37394) @@ -1,3 +1,9 @@ +Wed Oct 31 09:28:24 2012 Eric Hodel <drbrain@s...> + + * thread.c (rb_thread_call_without_gvl2): Note that ubf() may or may + not be called with the GVL. Hinted that rb_thread_call_with_gvl() + can be used to access ruby functionality. + Wed Oct 31 09:06:54 2012 Eric Hodel <drbrain@s...> * thread.c (rb_thread_call_without_gvl2): Update documentation to Index: thread.c =================================================================== --- thread.c (revision 37393) +++ thread.c (revision 37394) @@ -1100,7 +1100,9 @@ * * If another thread interrupts this thread (Thread#kill, signal delivery, * VM-shutdown request, and so on), `ubf()' is called (`ubf()' means - * "un-blocking function"). `ubf()' should interrupt `func()' execution. + * "un-blocking function"). `ubf()' should interrupt `func()' execution by + * toggling a cancellation flag, canceling the invocation of a call inside + * `func()' or similar. Note that `ubf()' may not be called with the GVL. * * There are built-in ubfs and you can specify these ubfs: * @@ -1143,15 +1145,17 @@ * NOTE: You can not execute most of Ruby C API and touch Ruby * objects in `func()' and `ubf()', including raising an * exception, because current thread doesn't acquire GVL - * (cause synchronization problem). If you need to do it, - * read source code of C APIs and confirm by yourself. + * (it causes synchronization problems). If you need to + * call ruby functions either use rb_thread_call_with_gvl() + * or read source code of C APIs and confirm safety by + * yourself. * * NOTE: In short, this API is difficult to use safely. I recommend you * use other ways if you have. We lack experiences to use this API. * Please report your problem related on it. * * NOTE: Releasing GVL and re-acquiring GVL may be expensive operations - * for short running `func()'. Be sure to benchmark and use this + * for a short running `func()'. Be sure to benchmark and use this * mechanism when `func()' consumes enough time. * * Safe C API: -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/