Skip to content

Commit 9c40839

Browse files
committed
Release C extension mutex when waiting for fds.
PullRequest: truffleruby/746
2 parents a80b59f + 156efa4 commit 9c40839

File tree

3 files changed

+34
-34
lines changed

3 files changed

+34
-34
lines changed

lib/truffle/truffle/cext.rb

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1037,7 +1037,7 @@ def rb_path_to_class(path)
10371037
def rb_proc_new(function, value)
10381038
Proc.new do |*args|
10391039
Truffle::CExt.rb_tr_unwrap(
1040-
Truffle.invoke_primitive(:interop_call_c_with_mutex, function, args.map! { |arg| Truffle::CExt.rb_tr_wrap(arg) }))
1040+
Truffle.invoke_primitive(:call_with_c_mutex, function, args.map! { |arg| Truffle::CExt.rb_tr_wrap(arg) }))
10411041
end
10421042
end
10431043

@@ -1092,11 +1092,11 @@ def rb_jump_tag(pos)
10921092
end
10931093

10941094
def rb_yield(value)
1095-
Truffle.invoke_primitive(:interop_call_c_with_mutex, rb_block_proc, [value])
1095+
Truffle.invoke_primitive(:call_with_c_mutex, rb_block_proc, [value])
10961096
end
10971097

10981098
def rb_yield_splat(values)
1099-
Truffle.invoke_primitive(:interop_call_c_with_mutex, rb_block_proc, values)
1099+
Truffle.invoke_primitive(:call_with_c_mutex, rb_block_proc, values)
11001100
end
11011101

11021102
def rb_ivar_lookup(object, name, default_value)
@@ -1248,7 +1248,7 @@ def rb_enumeratorize(obj, meth, args)
12481248

12491249
def rb_enumeratorize_with_size(obj, meth, args, size_fn)
12501250
return rb_enumeratorize(obj, meth, args) if size_fn.nil?
1251-
enum = obj.to_enum(meth, *args) { rb_tr_unwrap(Truffle.invoke_primitive(:interop_call_c_with_mutex, size_fn, [rb_tr_wrap(obj), rb_tr_wrap(args), rb_tr_wrap(enum)])) }
1251+
enum = obj.to_enum(meth, *args) { rb_tr_unwrap(Truffle.invoke_primitive(:call_with_c_mutex, size_fn, [rb_tr_wrap(obj), rb_tr_wrap(args), rb_tr_wrap(enum)])) }
12521252
enum
12531253
end
12541254

@@ -1258,7 +1258,7 @@ def rb_eval_string(str)
12581258

12591259
def rb_define_alloc_func(ruby_class, function)
12601260
ruby_class.singleton_class.send(:define_method, :__allocate__) do
1261-
Truffle::CExt.rb_tr_unwrap(Truffle.invoke_primitive(:interop_call_c_with_mutex, function, [Truffle::CExt.rb_tr_wrap(self)]))
1261+
Truffle::CExt.rb_tr_unwrap(Truffle.invoke_primitive(:call_with_c_mutex, function, [Truffle::CExt.rb_tr_wrap(self)]))
12621262
end
12631263
class << ruby_class
12641264
private :__allocate__
@@ -1376,7 +1376,7 @@ def rb_mutex_sleep(mutex, timeout)
13761376

13771377
def rb_mutex_synchronize(mutex, func, arg)
13781378
mutex.synchronize do
1379-
rb_tr_unwrap(Truffle.invoke_primitive(:interop_call_c_with_mutex, func, [rb_tr_wrap(arg)]))
1379+
rb_tr_unwrap(Truffle.invoke_primitive(:call_with_c_mutex, func, [rb_tr_wrap(arg)]))
13801380
end
13811381
end
13821382

@@ -1438,23 +1438,23 @@ def rb_data_typed_object_wrap(ruby_class, data, data_type, mark, free, size)
14381438
def data_finalizer(free, data_holder)
14391439
raise unless free.respond_to?(:call)
14401440
proc {
1441-
Truffle.invoke_primitive(:interop_call_c_with_mutex, free, [data_holder.data]) unless data_holder.data.nil?
1441+
Truffle.invoke_primitive(:call_with_c_mutex, free, [data_holder.data]) unless data_holder.data.nil?
14421442
}
14431443
end
14441444

14451445
def data_marker(mark, data_holder)
14461446
raise unless mark.respond_to?(:call)
14471447
proc { |obj|
14481448
create_mark_list
1449-
Truffle.invoke_primitive(:interop_call_c_with_mutex, mark, [data_holder.data]) unless data_holder.data.nil?
1449+
Truffle.invoke_primitive(:call_with_c_mutex, mark, [data_holder.data]) unless data_holder.data.nil?
14501450
set_mark_list_on_object(obj)
14511451
}
14521452
end
14531453

14541454
def data_sizer(sizer, data_holder)
14551455
raise unless sizer.respond_to?(:call)
14561456
proc {
1457-
Truffle.invoke_primitive(:interop_call_c_with_mutex, sizer, [data_holder.data])
1457+
Truffle.invoke_primitive(:call_with_c_mutex, sizer, [data_holder.data])
14581458
}
14591459
end
14601460

@@ -1488,51 +1488,51 @@ def send_splatted(object, method, args)
14881488

14891489
def rb_block_call(object, method, args, func, data)
14901490
object.__send__(method, *args) do |*block_args|
1491-
rb_tr_unwrap(Truffle.invoke_primitive(:interop_call_c_with_mutex, func, [rb_tr_wrap(block_args.first), data, block_args.size, RARRAY_PTR(block_args), nil]))
1491+
rb_tr_unwrap(Truffle.invoke_primitive(:call_with_c_mutex, func, [rb_tr_wrap(block_args.first), data, block_args.size, RARRAY_PTR(block_args), nil]))
14921492
end
14931493
end
14941494

14951495
def rb_ensure(b_proc, data1, e_proc, data2)
14961496
begin
1497-
rb_tr_unwrap(Truffle.invoke_primitive(:interop_call_c_with_mutex, b_proc, [data1]))
1497+
rb_tr_unwrap(Truffle.invoke_primitive(:call_with_c_mutex, b_proc, [data1]))
14981498
ensure
1499-
rb_tr_unwrap(Truffle.invoke_primitive(:interop_call_c_with_mutex, e_proc, [data2]))
1499+
rb_tr_unwrap(Truffle.invoke_primitive(:call_with_c_mutex, e_proc, [data2]))
15001500
end
15011501
end
15021502

15031503
def rb_rescue(b_proc, data1, r_proc, data2)
15041504
begin
1505-
Truffle.invoke_primitive(:interop_call_c_with_mutex, b_proc, [data1])
1505+
Truffle.invoke_primitive(:call_with_c_mutex, b_proc, [data1])
15061506
rescue StandardError => e
1507-
Truffle.invoke_primitive(:interop_call_c_with_mutex, r_proc, [data2, rb_tr_wrap(e)])
1507+
Truffle.invoke_primitive(:call_with_c_mutex, r_proc, [data2, rb_tr_wrap(e)])
15081508
end
15091509
end
15101510

15111511
def rb_rescue2(b_proc, data1, r_proc, data2, rescued)
15121512
begin
1513-
Truffle.invoke_primitive(:interop_call_c_with_mutex, b_proc, [data1])
1513+
Truffle.invoke_primitive(:call_with_c_mutex, b_proc, [data1])
15141514
rescue *rescued => e
1515-
Truffle.invoke_primitive(:interop_call_c_with_mutex, r_proc, [data2, rb_tr_wrap(e)])
1515+
Truffle.invoke_primitive(:call_with_c_mutex, r_proc, [data2, rb_tr_wrap(e)])
15161516
end
15171517
end
15181518

15191519
def rb_exec_recursive(func, obj, arg)
15201520
result = nil
15211521

15221522
recursive = Thread.detect_recursion(obj) do
1523-
result = rb_tr_unwrap(Truffle.invoke_primitive(:interop_call_c_with_mutex, func, [rb_tr_wrap(obj), rb_tr_wrap(arg), 0]))
1523+
result = rb_tr_unwrap(Truffle.invoke_primitive(:call_with_c_mutex, func, [rb_tr_wrap(obj), rb_tr_wrap(arg), 0]))
15241524
end
15251525

15261526
if recursive
1527-
rb_tr_unwrap(Truffle.invoke_primitive(:interop_call_c_with_mutex, func, [rb_tr_wrap(obj), rb_tr_wrap(arg), 1]))
1527+
rb_tr_unwrap(Truffle.invoke_primitive(:call_with_c_mutex, func, [rb_tr_wrap(obj), rb_tr_wrap(arg), 1]))
15281528
else
15291529
result
15301530
end
15311531
end
15321532

15331533
def rb_catch_obj(tag, func, data)
15341534
catch tag do |caught|
1535-
rb_tr_unwrap(Truffle.invoke_primitive(:interop_call_c_with_mutex, func, [rb_tr_wrap(caught), rb_tr_wrap(data), rb_tr_wrap(nil)]))
1535+
rb_tr_unwrap(Truffle.invoke_primitive(:call_with_c_mutex, func, [rb_tr_wrap(caught), rb_tr_wrap(data), rb_tr_wrap(nil)]))
15361536
end
15371537
end
15381538

@@ -1602,12 +1602,12 @@ def rb_time_interval_acceptable(time_val)
16021602

16031603
def rb_thread_create(fn, args)
16041604
Thread.new do
1605-
Truffle.invoke_primitive(:interop_call_c_with_mutex, fn, [args])
1605+
Truffle.invoke_primitive(:call_with_c_mutex, fn, [args])
16061606
end
16071607
end
16081608

16091609
def rb_thread_call_with_gvl(function, data)
1610-
Truffle.invoke_primitive(:interop_call_c_with_mutex, function, [data])
1610+
Truffle.invoke_primitive(:call_with_c_mutex, function, [data])
16111611
end
16121612

16131613
def rb_thread_call_without_gvl(function, data1, unblock, data2)
@@ -1618,7 +1618,7 @@ def rb_thread_call_without_gvl(function, data1, unblock, data2)
16181618
end
16191619

16201620
runner = -> {
1621-
Truffle.invoke_primitive(:interop_call_c_without_mutex, function, [data1])
1621+
Truffle.invoke_primitive(:call_without_c_mutex, function, [data1])
16221622
}
16231623

16241624
Thread.current.unblock unblocker, runner
@@ -1632,22 +1632,22 @@ def rb_iterate(iteration, iterated_object, callback, callback_arg)
16321632
end
16331633
else
16341634
call_with_thread_locally_stored_block iteration, iterated_object do |block_arg|
1635-
rb_tr_unwrap Truffle.invoke_primitive(:interop_call_c_with_mutex, callback, [rb_tr_wrap(block_arg), rb_tr_wrap(callback_arg), rb_tr_wrap(nil)])
1635+
rb_tr_unwrap Truffle.invoke_primitive(:call_with_c_mutex, callback, [rb_tr_wrap(block_arg), rb_tr_wrap(callback_arg), rb_tr_wrap(nil)])
16361636
end
16371637
end
16381638
end
16391639

16401640
def rb_thread_wait_fd(fd)
16411641
io = IO.for_fd(fd)
16421642
io.autoclose = false
1643-
IO.select([io])
1643+
Truffle.invoke_primitive(:call_without_c_mutex, IO.method(:select), [[io]])
16441644
nil
16451645
end
16461646

16471647
def rb_thread_fd_writable(fd)
16481648
io = IO.for_fd(fd)
16491649
io.autoclose = false
1650-
_r, w, _e = IO.select(nil, [io])
1650+
_r, w, _e = Truffle.invoke_primitive(:call_without_c_mutex, IO.method(:select), [nil, [io]])
16511651
w.size
16521652
end
16531653

@@ -1666,7 +1666,7 @@ def rb_wait_for_single_fd(fd, events, tv_secs, tv_usecs)
16661666
if tv_secs > 0 || tv_usecs > 0
16671667
timeout = tv_secs + tv_usecs/1.0e6
16681668
end
1669-
r, w, e = IO.select(read, write, error, *timeout)
1669+
r, w, e = Truffle.invoke_primitive(:call_without_c_mutex, IO.method(:select), [read, write, error, *timeout])
16701670
if r.nil? # timeout
16711671
0
16721672
else
@@ -1738,11 +1738,11 @@ def rb_define_hooked_variable(name, gvar, getter, setter)
17381738
id = name.to_sym
17391739

17401740
getter_proc = -> {
1741-
rb_tr_unwrap Truffle.invoke_primitive(:interop_call_c_with_mutex, getter, [rb_tr_wrap(id), gvar, rb_tr_wrap(nil)])
1741+
rb_tr_unwrap Truffle.invoke_primitive(:call_with_c_mutex, getter, [rb_tr_wrap(id), gvar, rb_tr_wrap(nil)])
17421742
}
17431743

17441744
setter_proc = -> value {
1745-
Truffle.invoke_primitive(:interop_call_c_with_mutex, setter, [rb_tr_wrap(value), rb_tr_wrap(id), gvar, rb_tr_wrap(nil)])
1745+
Truffle.invoke_primitive(:call_with_c_mutex, setter, [rb_tr_wrap(value), rb_tr_wrap(id), gvar, rb_tr_wrap(nil)])
17461746
}
17471747

17481748
Truffle::KernelOperations.define_hooked_variable id, getter_proc, setter_proc

lib/truffle/truffle/cext_ruby.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ def rb_define_method(mod, name, function, argc)
3636
# here so that the `rb_block_*` functions will be able to find
3737
# it by walking the stack.
3838
if block
39-
Truffle::CExt.rb_tr_unwrap(Truffle.invoke_primitive(:interop_call_c_with_mutex, function, args, &block))
39+
Truffle::CExt.rb_tr_unwrap(Truffle.invoke_primitive(:call_with_c_mutex, function, args, &block))
4040
else
41-
Truffle::CExt.rb_tr_unwrap(Truffle.invoke_primitive(:interop_call_c_with_mutex, function, args))
41+
Truffle::CExt.rb_tr_unwrap(Truffle.invoke_primitive(:call_with_c_mutex, function, args))
4242
end
4343
ensure
4444
Truffle::CExt.pop_preserving_frame
@@ -51,7 +51,7 @@ def rb_define_method(mod, name, function, argc)
5151
private
5252

5353
def rb_iterate_call_block(callback, block_arg, callback_arg, &block)
54-
rb_tr_unwrap(Truffle.invoke_primitive(:interop_call_c_with_mutex, callback, [rb_tr_wrap(block_arg), rb_tr_wrap(callback_arg)]))
54+
rb_tr_unwrap(Truffle.invoke_primitive(:call_with_c_mutex, callback, [rb_tr_wrap(block_arg), rb_tr_wrap(callback_arg)]))
5555
end
5656

5757
def call_with_thread_locally_stored_block(function, *args, &block)
@@ -61,7 +61,7 @@ def call_with_thread_locally_stored_block(function, *args, &block)
6161
previous_block = Thread.current[:__C_BLOCK__]
6262
begin
6363
Thread.current[:__C_BLOCK__] = block
64-
rb_tr_unwrap(Truffle.invoke_primitive(:interop_call_c_with_mutex, function, args.map! { |arg| Truffle::CExt.rb_tr_wrap(arg) }, &block))
64+
rb_tr_unwrap(Truffle.invoke_primitive(:call_with_c_mutex, function, args.map! { |arg| Truffle::CExt.rb_tr_wrap(arg) }, &block))
6565
ensure
6666
Thread.current[:__C_BLOCK__] = previous_block
6767
end

src/main/java/org/truffleruby/cext/CExtNodes.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@
114114
public class CExtNodes {
115115

116116
@ImportStatic(Message.class)
117-
@Primitive(name = "interop_call_c_with_mutex")
117+
@Primitive(name = "call_with_c_mutex")
118118
public abstract static class CallCWithMutexNode extends PrimitiveArrayArgumentsNode {
119119

120120
@Specialization
@@ -157,7 +157,7 @@ private Object execute(TruffleObject receiver, Object[] args, Node executeNode,
157157
}
158158

159159
@ImportStatic(Message.class)
160-
@Primitive(name = "interop_call_c_without_mutex")
160+
@Primitive(name = "call_without_c_mutex")
161161
public abstract static class CallCWithoutMutexNode extends PrimitiveArrayArgumentsNode {
162162

163163
@Specialization

0 commit comments

Comments
 (0)