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

ruby-changes:64876

From: Koichi <ko1@a...>
Date: Thu, 14 Jan 2021 11:22:07 +0900 (JST)
Subject: [ruby-changes:64876] 1614dd9fd4 (ruby_3_0): expose some C-APIs for ractor

https://git.ruby-lang.org/ruby.git/commit/?id=1614dd9fd4

From 1614dd9fd44e27aa5afc6de94602ac7292962d11 Mon Sep 17 00:00:00 2001
From: Koichi Sasada <ko1@a...>
Date: Wed, 6 Jan 2021 15:30:56 +0900
Subject: expose some C-APIs for ractor

expose some C-APIs to try to make ractor utilities on external gems.

* add
  * rb_ractor_local_storage_value_lookup() to check availability
* expose
  * rb_ractor_make_shareable()
  * rb_ractor_make_shareable_copy()
  * rb_proc_isolate() (not public)
  * rb_proc_isolate_bang() (not public)
  * rb_proc_ractor_make_shareable() (not public)

diff --git a/include/ruby/ractor.h b/include/ruby/ractor.h
index 239df9c..1d66874 100644
--- a/include/ruby/ractor.h
+++ b/include/ruby/ractor.h
@@ -32,6 +32,7 @@ void rb_ractor_stderr_set(VALUE); https://github.com/ruby/ruby/blob/trunk/include/ruby/ractor.h#L32
 
 rb_ractor_local_key_t rb_ractor_local_storage_value_newkey(void);
 VALUE rb_ractor_local_storage_value(rb_ractor_local_key_t key);
+bool rb_ractor_local_storage_value_lookup(rb_ractor_local_key_t key, VALUE *val);
 void  rb_ractor_local_storage_value_set(rb_ractor_local_key_t key, VALUE val);
 
 RUBY_EXTERN const struct rb_ractor_local_storage_type rb_ractor_local_storage_type_free;
@@ -41,6 +42,9 @@ rb_ractor_local_key_t rb_ractor_local_storage_ptr_newkey(const struct rb_ractor_ https://github.com/ruby/ruby/blob/trunk/include/ruby/ractor.h#L42
 void *rb_ractor_local_storage_ptr(rb_ractor_local_key_t key);
 void  rb_ractor_local_storage_ptr_set(rb_ractor_local_key_t key, void *ptr);
 
+VALUE rb_ractor_make_shareable(VALUE obj);
+VALUE rb_ractor_make_shareable_copy(VALUE obj);
+
 RUBY_SYMBOL_EXPORT_END
 
 #define RB_OBJ_SHAREABLE_P(obj) FL_TEST_RAW((obj), RUBY_FL_SHAREABLE)
@@ -61,7 +65,4 @@ rb_ractor_shareable_p(VALUE obj) https://github.com/ruby/ruby/blob/trunk/include/ruby/ractor.h#L65
     }
 }
 
-VALUE rb_ractor_make_shareable(VALUE obj);
-VALUE rb_ractor_make_shareable_copy(VALUE obj);
-
 #endif /* RUBY_RACTOR_H */
diff --git a/ractor.c b/ractor.c
index d9a8e07..420b205 100644
--- a/ractor.c
+++ b/ractor.c
@@ -3128,6 +3128,17 @@ rb_ractor_local_storage_value(rb_ractor_local_key_t key) https://github.com/ruby/ruby/blob/trunk/ractor.c#L3128
     }
 }
 
+bool
+rb_ractor_local_storage_value_lookup(rb_ractor_local_key_t key, VALUE *val)
+{
+    if (ractor_local_ref(key, (void **)val)) {
+        return true;
+    }
+    else {
+        return false;
+    }
+}
+
 void
 rb_ractor_local_storage_value_set(rb_ractor_local_key_t key, VALUE val)
 {
diff --git a/vm_core.h b/vm_core.h
index cfce3af..5f8d4ab 100644
--- a/vm_core.h
+++ b/vm_core.h
@@ -1085,9 +1085,11 @@ typedef struct { https://github.com/ruby/ruby/blob/trunk/vm_core.h#L1085
     unsigned int is_isolated: 1;        /* bool */
 } rb_proc_t;
 
+RUBY_SYMBOL_EXPORT_BEGIN
 VALUE rb_proc_isolate(VALUE self);
 VALUE rb_proc_isolate_bang(VALUE self);
 VALUE rb_proc_ractor_make_shareable(VALUE self);
+RUBY_SYMBOL_EXPORT_END
 
 typedef struct {
     VALUE flags; /* imemo header */
-- 
cgit v0.10.2


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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