1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/ext/fiddle
normal 15476c695d fiddle: release GVL for ffi_call
Some external functions I wish to call may take a long time
and unnecessarily block other threads.  This may lead to performance
regressions for fast functions as releasing/acquiring the GVL is not
cheap, but can improve performance for long-running functions
in multi-threaded applications.

This also means we must reacquire the GVL when calling Ruby-defined
callbacks for Fiddle::Closure, meaning we must detect whether the
current thread has the GVL by exporting ruby_thread_has_gvl_p
in internal.h

* ext/fiddle/function.c (struct nogvl_ffi_call_args):
  new struct for GVL release
  (nogvl_ffi_call): new function
  (function_call): adjust for GVL release
  [ruby-core:71642] [Feature #11607]
* ext/fiddle/closure.c (struct callback_args):
  new struct for GVL acquire
  (with_gvl_callback): adjusted original callback function
  (callback): wrapper for conditional GVL acquire
* ext/fiddle/depend: add dependencies
* ext/fiddle/extconf.rb: include top_srcdir for internal.h
* internal.h (ruby_thread_has_gvl_p): expose for fiddle
* vm_core.h (ruby_thread_has_gvl_p): moved to internal.h
* test/fiddle/test_function.rb (test_nogvl_poll): new test

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52723 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-11-23 21:20:56 +00:00
..
lib cparser.rb: limit word number 2015-01-03 09:53:30 +00:00
win32 libffi: workaround of VC12 ml 2015-01-24 15:42:27 +00:00
closure.c fiddle: release GVL for ffi_call 2015-11-23 21:20:56 +00:00
closure.h ext: protoize no-arguments functions 2014-10-04 23:29:24 +00:00
conversions.c * encoding.c (rb_enc_codepoint_len): Use UNREACHABLE to avoid "control 2012-04-13 23:45:37 +00:00
conversions.h * ext/fiddle/closure.c (callback): deal with unsinged integers. 2012-02-15 10:57:05 +00:00
depend fiddle: release GVL for ffi_call 2015-11-23 21:20:56 +00:00
extconf.rb fiddle: release GVL for ffi_call 2015-11-23 21:20:56 +00:00
extlibs fiddle: extlibs 2014-12-23 13:39:13 +00:00
fiddle.c use NUM2SIZET instead of NUM2INT 2014-02-25 14:18:13 +00:00
fiddle.h * ext/dl/*: remove DL as it is replaced by Fiddle. 2014-10-31 21:13:09 +00:00
function.c fiddle: release GVL for ffi_call 2015-11-23 21:20:56 +00:00
function.h ext: protoize no-arguments functions 2014-10-04 23:29:24 +00:00
handle.c * include/ruby/ruby.h: $SAFE=2 is now obsolete. 2015-06-18 14:21:03 +00:00
pointer.c ext/dl, ext/fiddle: fix memory leak 2014-03-08 04:46:57 +00:00