[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]