1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/test/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
..
helper.rb fix r52690 2015-11-21 06:36:05 +00:00
test_c_struct_entry.rb
test_c_union_entity.rb
test_closure.rb test/fiddle: revert r52384 partially 2015-10-30 07:17:08 +00:00
test_cparser.rb test/fiddle: revert r52384 partially 2015-10-30 07:17:08 +00:00
test_fiddle.rb
test_func.rb test/fiddle: revert r52384 partially 2015-10-30 07:17:08 +00:00
test_function.rb fiddle: release GVL for ffi_call 2015-11-23 21:20:56 +00:00
test_handle.rb
test_import.rb test/fiddle: revert r52384 partially 2015-10-30 07:17:08 +00:00
test_pointer.rb