Skip to content

Commit 156efa4

Browse files
committed
Refactor to the existing primitives and rename to reflect new use.
1 parent 249e124 commit 156efa4

File tree

3 files changed

+34
-87
lines changed

3 files changed

+34
-87
lines changed

lib/truffle/truffle/cext.rb

Lines changed: 28 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1032,7 +1032,7 @@ def rb_path_to_class(path)
10321032
def rb_proc_new(function, value)
10331033
Proc.new do |*args|
10341034
Truffle::CExt.rb_tr_unwrap(
1035-
Truffle.invoke_primitive(:interop_call_c_with_mutex, function, args.map! { |arg| Truffle::CExt.rb_tr_wrap(arg) }))
1035+
Truffle.invoke_primitive(:call_with_c_mutex, function, args.map! { |arg| Truffle::CExt.rb_tr_wrap(arg) }))
10361036
end
10371037
end
10381038

@@ -1087,11 +1087,11 @@ def rb_jump_tag(pos)
10871087
end
10881088

10891089
def rb_yield(value)
1090-
Truffle.invoke_primitive(:interop_call_c_with_mutex, rb_block_proc, [value])
1090+
Truffle.invoke_primitive(:call_with_c_mutex, rb_block_proc, [value])
10911091
end
10921092

10931093
def rb_yield_splat(values)
1094-
Truffle.invoke_primitive(:interop_call_c_with_mutex, rb_block_proc, values)
1094+
Truffle.invoke_primitive(:call_with_c_mutex, rb_block_proc, values)
10951095
end
10961096

10971097
def rb_ivar_lookup(object, name, default_value)
@@ -1243,7 +1243,7 @@ def rb_enumeratorize(obj, meth, args)
12431243

12441244
def rb_enumeratorize_with_size(obj, meth, args, size_fn)
12451245
return rb_enumeratorize(obj, meth, args) if size_fn.nil?
1246-
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)])) }
1246+
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)])) }
12471247
enum
12481248
end
12491249

@@ -1253,7 +1253,7 @@ def rb_eval_string(str)
12531253

12541254
def rb_define_alloc_func(ruby_class, function)
12551255
ruby_class.singleton_class.send(:define_method, :__allocate__) do
1256-
Truffle::CExt.rb_tr_unwrap(Truffle.invoke_primitive(:interop_call_c_with_mutex, function, [Truffle::CExt.rb_tr_wrap(self)]))
1256+
Truffle::CExt.rb_tr_unwrap(Truffle.invoke_primitive(:call_with_c_mutex, function, [Truffle::CExt.rb_tr_wrap(self)]))
12571257
end
12581258
class << ruby_class
12591259
private :__allocate__
@@ -1371,7 +1371,7 @@ def rb_mutex_sleep(mutex, timeout)
13711371

13721372
def rb_mutex_synchronize(mutex, func, arg)
13731373
mutex.synchronize do
1374-
rb_tr_unwrap(Truffle.invoke_primitive(:interop_call_c_with_mutex, func, [rb_tr_wrap(arg)]))
1374+
rb_tr_unwrap(Truffle.invoke_primitive(:call_with_c_mutex, func, [rb_tr_wrap(arg)]))
13751375
end
13761376
end
13771377

@@ -1433,23 +1433,23 @@ def rb_data_typed_object_wrap(ruby_class, data, data_type, mark, free, size)
14331433
def data_finalizer(free, data_holder)
14341434
raise unless free.respond_to?(:call)
14351435
proc {
1436-
Truffle.invoke_primitive(:interop_call_c_with_mutex, free, [data_holder.data]) unless data_holder.data.nil?
1436+
Truffle.invoke_primitive(:call_with_c_mutex, free, [data_holder.data]) unless data_holder.data.nil?
14371437
}
14381438
end
14391439

14401440
def data_marker(mark, data_holder)
14411441
raise unless mark.respond_to?(:call)
14421442
proc { |obj|
14431443
create_mark_list
1444-
Truffle.invoke_primitive(:interop_call_c_with_mutex, mark, [data_holder.data]) unless data_holder.data.nil?
1444+
Truffle.invoke_primitive(:call_with_c_mutex, mark, [data_holder.data]) unless data_holder.data.nil?
14451445
set_mark_list_on_object(obj)
14461446
}
14471447
end
14481448

14491449
def data_sizer(sizer, data_holder)
14501450
raise unless sizer.respond_to?(:call)
14511451
proc {
1452-
Truffle.invoke_primitive(:interop_call_c_with_mutex, sizer, [data_holder.data])
1452+
Truffle.invoke_primitive(:call_with_c_mutex, sizer, [data_holder.data])
14531453
}
14541454
end
14551455

@@ -1483,51 +1483,51 @@ def send_splatted(object, method, args)
14831483

14841484
def rb_block_call(object, method, args, func, data)
14851485
object.__send__(method, *args) do |*block_args|
1486-
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]))
1486+
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]))
14871487
end
14881488
end
14891489

14901490
def rb_ensure(b_proc, data1, e_proc, data2)
14911491
begin
1492-
rb_tr_unwrap(Truffle.invoke_primitive(:interop_call_c_with_mutex, b_proc, [data1]))
1492+
rb_tr_unwrap(Truffle.invoke_primitive(:call_with_c_mutex, b_proc, [data1]))
14931493
ensure
1494-
rb_tr_unwrap(Truffle.invoke_primitive(:interop_call_c_with_mutex, e_proc, [data2]))
1494+
rb_tr_unwrap(Truffle.invoke_primitive(:call_with_c_mutex, e_proc, [data2]))
14951495
end
14961496
end
14971497

14981498
def rb_rescue(b_proc, data1, r_proc, data2)
14991499
begin
1500-
Truffle.invoke_primitive(:interop_call_c_with_mutex, b_proc, [data1])
1500+
Truffle.invoke_primitive(:call_with_c_mutex, b_proc, [data1])
15011501
rescue StandardError => e
1502-
Truffle.invoke_primitive(:interop_call_c_with_mutex, r_proc, [data2, rb_tr_wrap(e)])
1502+
Truffle.invoke_primitive(:call_with_c_mutex, r_proc, [data2, rb_tr_wrap(e)])
15031503
end
15041504
end
15051505

15061506
def rb_rescue2(b_proc, data1, r_proc, data2, rescued)
15071507
begin
1508-
Truffle.invoke_primitive(:interop_call_c_with_mutex, b_proc, [data1])
1508+
Truffle.invoke_primitive(:call_with_c_mutex, b_proc, [data1])
15091509
rescue *rescued => e
1510-
Truffle.invoke_primitive(:interop_call_c_with_mutex, r_proc, [data2, rb_tr_wrap(e)])
1510+
Truffle.invoke_primitive(:call_with_c_mutex, r_proc, [data2, rb_tr_wrap(e)])
15111511
end
15121512
end
15131513

15141514
def rb_exec_recursive(func, obj, arg)
15151515
result = nil
15161516

15171517
recursive = Thread.detect_recursion(obj) do
1518-
result = rb_tr_unwrap(Truffle.invoke_primitive(:interop_call_c_with_mutex, func, [rb_tr_wrap(obj), rb_tr_wrap(arg), 0]))
1518+
result = rb_tr_unwrap(Truffle.invoke_primitive(:call_with_c_mutex, func, [rb_tr_wrap(obj), rb_tr_wrap(arg), 0]))
15191519
end
15201520

15211521
if recursive
1522-
rb_tr_unwrap(Truffle.invoke_primitive(:interop_call_c_with_mutex, func, [rb_tr_wrap(obj), rb_tr_wrap(arg), 1]))
1522+
rb_tr_unwrap(Truffle.invoke_primitive(:call_with_c_mutex, func, [rb_tr_wrap(obj), rb_tr_wrap(arg), 1]))
15231523
else
15241524
result
15251525
end
15261526
end
15271527

15281528
def rb_catch_obj(tag, func, data)
15291529
catch tag do |caught|
1530-
rb_tr_unwrap(Truffle.invoke_primitive(:interop_call_c_with_mutex, func, [rb_tr_wrap(caught), rb_tr_wrap(data), rb_tr_wrap(nil)]))
1530+
rb_tr_unwrap(Truffle.invoke_primitive(:call_with_c_mutex, func, [rb_tr_wrap(caught), rb_tr_wrap(data), rb_tr_wrap(nil)]))
15311531
end
15321532
end
15331533

@@ -1597,12 +1597,12 @@ def rb_time_interval_acceptable(time_val)
15971597

15981598
def rb_thread_create(fn, args)
15991599
Thread.new do
1600-
Truffle.invoke_primitive(:interop_call_c_with_mutex, fn, [args])
1600+
Truffle.invoke_primitive(:call_with_c_mutex, fn, [args])
16011601
end
16021602
end
16031603

16041604
def rb_thread_call_with_gvl(function, data)
1605-
Truffle.invoke_primitive(:interop_call_c_with_mutex, function, [data])
1605+
Truffle.invoke_primitive(:call_with_c_mutex, function, [data])
16061606
end
16071607

16081608
def rb_thread_call_without_gvl(function, data1, unblock, data2)
@@ -1613,7 +1613,7 @@ def rb_thread_call_without_gvl(function, data1, unblock, data2)
16131613
end
16141614

16151615
runner = -> {
1616-
Truffle.invoke_primitive(:interop_call_c_without_mutex, function, [data1])
1616+
Truffle.invoke_primitive(:call_without_c_mutex, function, [data1])
16171617
}
16181618

16191619
Thread.current.unblock unblocker, runner
@@ -1627,32 +1627,22 @@ def rb_iterate(iteration, iterated_object, callback, callback_arg)
16271627
end
16281628
else
16291629
call_with_thread_locally_stored_block iteration, iterated_object do |block_arg|
1630-
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)])
1630+
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)])
16311631
end
16321632
end
16331633
end
16341634

16351635
def rb_thread_wait_fd(fd)
16361636
io = IO.for_fd(fd)
16371637
io.autoclose = false
1638-
owned = rb_release_cext_mutex
1639-
begin
1640-
IO.select([io])
1641-
ensure
1642-
rb_acquire_cext_mutex if owned
1643-
end
1638+
Truffle.invoke_primitive(:call_without_c_mutex, IO.method(:select), [[io]])
16441639
nil
16451640
end
16461641

16471642
def rb_thread_fd_writable(fd)
16481643
io = IO.for_fd(fd)
16491644
io.autoclose = false
1650-
owned = rb_release_cext_mutex
1651-
begin
1652-
_r, w, _e = IO.select(nil, [io])
1653-
ensure
1654-
rb_acquire_cext_mutex if owned
1655-
end
1645+
_r, w, _e = Truffle.invoke_primitive(:call_without_c_mutex, IO.method(:select), [nil, [io]])
16561646
w.size
16571647
end
16581648

@@ -1671,12 +1661,7 @@ def rb_wait_for_single_fd(fd, events, tv_secs, tv_usecs)
16711661
if tv_secs > 0 || tv_usecs > 0
16721662
timeout = tv_secs + tv_usecs/1.0e6
16731663
end
1674-
owned = rb_release_cext_mutex
1675-
begin
1676-
r, w, e = IO.select(read, write, error, *timeout)
1677-
ensure
1678-
rb_acquire_cext_mutex if owned
1679-
end
1664+
r, w, e = Truffle.invoke_primitive(:call_without_c_mutex, IO.method(:select), [read, write, error, *timeout])
16801665
if r.nil? # timeout
16811666
0
16821667
else
@@ -1748,11 +1733,11 @@ def rb_define_hooked_variable(name, gvar, getter, setter)
17481733
id = name.to_sym
17491734

17501735
getter_proc = -> {
1751-
rb_tr_unwrap Truffle.invoke_primitive(:interop_call_c_with_mutex, getter, [rb_tr_wrap(id), gvar, rb_tr_wrap(nil)])
1736+
rb_tr_unwrap Truffle.invoke_primitive(:call_with_c_mutex, getter, [rb_tr_wrap(id), gvar, rb_tr_wrap(nil)])
17521737
}
17531738

17541739
setter_proc = -> value {
1755-
Truffle.invoke_primitive(:interop_call_c_with_mutex, setter, [rb_tr_wrap(value), rb_tr_wrap(id), gvar, rb_tr_wrap(nil)])
1740+
Truffle.invoke_primitive(:call_with_c_mutex, setter, [rb_tr_wrap(value), rb_tr_wrap(id), gvar, rb_tr_wrap(nil)])
17561741
}
17571742

17581743
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 & 40 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
@@ -199,44 +199,6 @@ private Object execute(TruffleObject receiver, Object[] args, Node executeNode,
199199

200200
}
201201

202-
@CoreMethod(names = "rb_acquire_cext_mutex")
203-
public abstract static class AcquireCExtMutexNode extends CoreMethodArrayArgumentsNode {
204-
@Specialization
205-
public boolean acquireMutex(VirtualFrame frame,
206-
@Cached("create()") BranchProfile exceptionProfile,
207-
@Cached("createBinaryProfile()") ConditionProfile ownedProfile) {
208-
if (getContext().getOptions().CEXT_LOCK) {
209-
final ReentrantLock lock = getContext().getCExtensionsLock();
210-
boolean owned = lock.isHeldByCurrentThread();
211-
212-
if (ownedProfile.profile(!owned)) {
213-
MutexOperations.lockInternal(getContext(), lock, this);
214-
return true;
215-
}
216-
}
217-
return false;
218-
}
219-
}
220-
221-
@CoreMethod(names = "rb_release_cext_mutex")
222-
public abstract static class ReleaseCExtMutexNode extends CoreMethodArrayArgumentsNode {
223-
@Specialization
224-
public boolean releaseMutex(VirtualFrame frame,
225-
@Cached("create()") BranchProfile exceptionProfile,
226-
@Cached("createBinaryProfile()") ConditionProfile ownedProfile) {
227-
if (getContext().getOptions().CEXT_LOCK) {
228-
final ReentrantLock lock = getContext().getCExtensionsLock();
229-
boolean owned = lock.isHeldByCurrentThread();
230-
231-
if (ownedProfile.profile(owned)) {
232-
MutexOperations.unlockInternal(lock);
233-
return true;
234-
}
235-
}
236-
return false;
237-
}
238-
}
239-
240202
@CoreMethod(names = "rb_ulong2num", onSingleton = true, required = 1)
241203
public abstract static class ULong2NumNode extends CoreMethodArrayArgumentsNode {
242204

0 commit comments

Comments
 (0)