diff options
| -rw-r--r-- | common.mk | 410 | ||||
| -rw-r--r-- | concurrent_set.c (renamed from ractor_safe_set.c) | 152 | ||||
| -rw-r--r-- | internal/concurrent_set.h | 21 | ||||
| -rw-r--r-- | internal/ractor_safe_set.h | 21 | ||||
| -rw-r--r-- | string.c | 26 |
5 files changed, 315 insertions, 315 deletions
@@ -151,7 +151,7 @@ COMMONOBJS = array.$(OBJEXT) \ proc.$(OBJEXT) \ process.$(OBJEXT) \ ractor.$(OBJEXT) \ - ractor_safe_set.$(OBJEXT) \ + concurrent_set.$(OBJEXT) \ random.$(OBJEXT) \ range.$(OBJEXT) \ rational.$(OBJEXT) \ @@ -3867,6 +3867,209 @@ complex.$(OBJEXT): {$(VPATH)}vm_core.h complex.$(OBJEXT): {$(VPATH)}vm_debug.h complex.$(OBJEXT): {$(VPATH)}vm_opts.h complex.$(OBJEXT): {$(VPATH)}vm_sync.h +concurrent_set.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h +concurrent_set.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h +concurrent_set.$(OBJEXT): $(CCAN_DIR)/list/list.h +concurrent_set.$(OBJEXT): $(CCAN_DIR)/str/str.h +concurrent_set.$(OBJEXT): $(hdrdir)/ruby/ruby.h +concurrent_set.$(OBJEXT): $(top_srcdir)/internal/array.h +concurrent_set.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h +concurrent_set.$(OBJEXT): $(top_srcdir)/internal/compilers.h +concurrent_set.$(OBJEXT): $(top_srcdir)/internal/gc.h +concurrent_set.$(OBJEXT): $(top_srcdir)/internal/imemo.h +concurrent_set.$(OBJEXT): $(top_srcdir)/internal/namespace.h +concurrent_set.$(OBJEXT): $(top_srcdir)/internal/concurrent_set.h +concurrent_set.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h +concurrent_set.$(OBJEXT): $(top_srcdir)/internal/serial.h +concurrent_set.$(OBJEXT): $(top_srcdir)/internal/set_table.h +concurrent_set.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +concurrent_set.$(OBJEXT): $(top_srcdir)/internal/vm.h +concurrent_set.$(OBJEXT): $(top_srcdir)/internal/warnings.h +concurrent_set.$(OBJEXT): {$(VPATH)}assert.h +concurrent_set.$(OBJEXT): {$(VPATH)}atomic.h +concurrent_set.$(OBJEXT): {$(VPATH)}backward/2/assume.h +concurrent_set.$(OBJEXT): {$(VPATH)}backward/2/attributes.h +concurrent_set.$(OBJEXT): {$(VPATH)}backward/2/bool.h +concurrent_set.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h +concurrent_set.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h +concurrent_set.$(OBJEXT): {$(VPATH)}backward/2/limits.h +concurrent_set.$(OBJEXT): {$(VPATH)}backward/2/long_long.h +concurrent_set.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h +concurrent_set.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h +concurrent_set.$(OBJEXT): {$(VPATH)}config.h +concurrent_set.$(OBJEXT): {$(VPATH)}debug_counter.h +concurrent_set.$(OBJEXT): {$(VPATH)}defines.h +concurrent_set.$(OBJEXT): {$(VPATH)}encoding.h +concurrent_set.$(OBJEXT): {$(VPATH)}id.h +concurrent_set.$(OBJEXT): {$(VPATH)}id_table.h +concurrent_set.$(OBJEXT): {$(VPATH)}intern.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/abi.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/anyargs.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/assume.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/cold.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/const.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/error.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/format.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/pure.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/warning.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/cast.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/compiler_is.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/compiler_since.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/config.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/constant_p.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/core.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/core/rarray.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/core/rclass.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/core/rdata.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/core/rfile.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/core/rhash.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/core/robject.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/core/rstring.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/ctype.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/dllexport.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/dosish.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/encoding/re.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/encoding/string.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/error.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/eval.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/event.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/fl_type.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/gc.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/glob.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/globals.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/has/attribute.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/has/builtin.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/has/extension.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/has/feature.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/has/warning.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/array.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/class.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/compar.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/complex.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/cont.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/dir.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/enum.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/error.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/eval.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/file.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/hash.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/io.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/load.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/object.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/parse.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/proc.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/process.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/random.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/range.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/rational.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/re.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/select.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/signal.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/string.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/struct.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/thread.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/time.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/variable.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/vm.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/interpreter.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/iterator.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/memory.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/method.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/module.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/newobj.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/scan_args.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/special_consts.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/static_assert.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/stdalign.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/stdbool.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/stdckdint.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/symbol.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/value.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/value_type.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/variable.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/warning_push.h +concurrent_set.$(OBJEXT): {$(VPATH)}internal/xmalloc.h +concurrent_set.$(OBJEXT): {$(VPATH)}method.h +concurrent_set.$(OBJEXT): {$(VPATH)}missing.h +concurrent_set.$(OBJEXT): {$(VPATH)}node.h +concurrent_set.$(OBJEXT): {$(VPATH)}onigmo.h +concurrent_set.$(OBJEXT): {$(VPATH)}oniguruma.h +concurrent_set.$(OBJEXT): {$(VPATH)}concurrent_set.c +concurrent_set.$(OBJEXT): {$(VPATH)}ruby_assert.h +concurrent_set.$(OBJEXT): {$(VPATH)}ruby_atomic.h +concurrent_set.$(OBJEXT): {$(VPATH)}rubyparser.h +concurrent_set.$(OBJEXT): {$(VPATH)}st.h +concurrent_set.$(OBJEXT): {$(VPATH)}subst.h +concurrent_set.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h +concurrent_set.$(OBJEXT): {$(VPATH)}thread_native.h +concurrent_set.$(OBJEXT): {$(VPATH)}vm_core.h +concurrent_set.$(OBJEXT): {$(VPATH)}vm_debug.h +concurrent_set.$(OBJEXT): {$(VPATH)}vm_opts.h +concurrent_set.$(OBJEXT): {$(VPATH)}vm_sync.h cont.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h cont.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h cont.$(OBJEXT): $(CCAN_DIR)/list/list.h @@ -14298,209 +14501,6 @@ ractor.$(OBJEXT): {$(VPATH)}vm_debug.h ractor.$(OBJEXT): {$(VPATH)}vm_opts.h ractor.$(OBJEXT): {$(VPATH)}vm_sync.h ractor.$(OBJEXT): {$(VPATH)}yjit.h -ractor_safe_set.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h -ractor_safe_set.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h -ractor_safe_set.$(OBJEXT): $(CCAN_DIR)/list/list.h -ractor_safe_set.$(OBJEXT): $(CCAN_DIR)/str/str.h -ractor_safe_set.$(OBJEXT): $(hdrdir)/ruby/ruby.h -ractor_safe_set.$(OBJEXT): $(top_srcdir)/internal/array.h -ractor_safe_set.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h -ractor_safe_set.$(OBJEXT): $(top_srcdir)/internal/compilers.h -ractor_safe_set.$(OBJEXT): $(top_srcdir)/internal/gc.h -ractor_safe_set.$(OBJEXT): $(top_srcdir)/internal/imemo.h -ractor_safe_set.$(OBJEXT): $(top_srcdir)/internal/namespace.h -ractor_safe_set.$(OBJEXT): $(top_srcdir)/internal/ractor_safe_set.h -ractor_safe_set.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h -ractor_safe_set.$(OBJEXT): $(top_srcdir)/internal/serial.h -ractor_safe_set.$(OBJEXT): $(top_srcdir)/internal/set_table.h -ractor_safe_set.$(OBJEXT): $(top_srcdir)/internal/static_assert.h -ractor_safe_set.$(OBJEXT): $(top_srcdir)/internal/vm.h -ractor_safe_set.$(OBJEXT): $(top_srcdir)/internal/warnings.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}assert.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}atomic.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}backward/2/assume.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}backward/2/attributes.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}backward/2/bool.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}backward/2/limits.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}backward/2/long_long.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}config.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}debug_counter.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}defines.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}encoding.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}id.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}id_table.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}intern.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/abi.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/anyargs.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/arithmetic.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/assume.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/attr/cold.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/attr/const.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/attr/error.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/attr/format.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/attr/pure.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/attr/warning.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/cast.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/compiler_is.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/compiler_since.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/config.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/constant_p.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/core.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/core/rarray.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/core/rclass.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/core/rdata.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/core/rfile.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/core/rhash.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/core/robject.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/core/rstring.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/ctype.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/dllexport.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/dosish.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/encoding/re.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/encoding/string.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/error.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/eval.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/event.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/fl_type.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/gc.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/glob.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/globals.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/has/attribute.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/has/builtin.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/has/extension.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/has/feature.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/has/warning.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/array.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/class.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/compar.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/complex.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/cont.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/dir.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/enum.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/error.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/eval.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/file.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/hash.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/io.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/load.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/object.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/parse.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/proc.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/process.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/random.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/range.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/rational.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/re.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/select.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/signal.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/string.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/struct.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/thread.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/time.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/variable.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/intern/vm.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/interpreter.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/iterator.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/memory.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/method.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/module.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/newobj.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/scan_args.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/special_consts.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/static_assert.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/stdalign.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/stdbool.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/stdckdint.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/symbol.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/value.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/value_type.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/variable.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/warning_push.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}internal/xmalloc.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}method.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}missing.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}node.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}onigmo.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}oniguruma.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}ractor_safe_set.c -ractor_safe_set.$(OBJEXT): {$(VPATH)}ruby_assert.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}ruby_atomic.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}rubyparser.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}st.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}subst.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h -ractor_safe_set.$(OBJEXT): {$(VPATH)}thread_native.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}vm_core.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}vm_debug.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}vm_opts.h -ractor_safe_set.$(OBJEXT): {$(VPATH)}vm_sync.h random.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h random.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h random.$(OBJEXT): $(CCAN_DIR)/list/list.h @@ -18343,7 +18343,7 @@ string.$(OBJEXT): $(top_srcdir)/internal/namespace.h string.$(OBJEXT): $(top_srcdir)/internal/numeric.h string.$(OBJEXT): $(top_srcdir)/internal/object.h string.$(OBJEXT): $(top_srcdir)/internal/proc.h -string.$(OBJEXT): $(top_srcdir)/internal/ractor_safe_set.h +string.$(OBJEXT): $(top_srcdir)/internal/concurrent_set.h string.$(OBJEXT): $(top_srcdir)/internal/re.h string.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h string.$(OBJEXT): $(top_srcdir)/internal/serial.h diff --git a/ractor_safe_set.c b/concurrent_set.c index c97a673fdc..dac6e9ce39 100644 --- a/ractor_safe_set.c +++ b/concurrent_set.c @@ -1,74 +1,74 @@ #include "internal.h" #include "internal/gc.h" -#include "internal/ractor_safe_set.h" +#include "internal/concurrent_set.h" #include "ruby_atomic.h" #include "ruby/atomic.h" #include "vm_sync.h" -enum ractor_safe_set_special_values { - RACTOR_SAFE_TABLE_EMPTY, - RACTOR_SAFE_TABLE_DELETED, - RACTOR_SAFE_TABLE_MOVED, - RACTOR_SAFE_TABLE_SPECIAL_VALUE_COUNT +enum concurrent_set_special_values { + CONCURRENT_SET_EMPTY, + CONCURRENT_SET_DELETED, + CONCURRENT_SET_MOVED, + CONCURRENT_SET_SPECIAL_VALUE_COUNT }; -struct ractor_safe_set_entry { +struct concurrent_set_entry { VALUE hash; VALUE key; }; -struct ractor_safe_set { +struct concurrent_set { rb_atomic_t size; unsigned int capacity; unsigned int deleted_entries; - struct rb_ractor_safe_set_funcs *funcs; - struct ractor_safe_set_entry *entries; + struct rb_concurrent_set_funcs *funcs; + struct concurrent_set_entry *entries; }; static void -ractor_safe_set_free(void *ptr) +concurrent_set_free(void *ptr) { - struct ractor_safe_set *set = ptr; + struct concurrent_set *set = ptr; xfree(set->entries); } static size_t -ractor_safe_set_size(const void *ptr) +concurrent_set_size(const void *ptr) { - const struct ractor_safe_set *set = ptr; - return sizeof(struct ractor_safe_set) + - (set->capacity * sizeof(struct ractor_safe_set_entry)); + const struct concurrent_set *set = ptr; + return sizeof(struct concurrent_set) + + (set->capacity * sizeof(struct concurrent_set_entry)); } -static const rb_data_type_t ractor_safe_set_type = { - .wrap_struct_name = "VM/ractor_safe_set", +static const rb_data_type_t concurrent_set_type = { + .wrap_struct_name = "VM/concurrent_set", .function = { .dmark = NULL, - .dfree = ractor_safe_set_free, - .dsize = ractor_safe_set_size, + .dfree = concurrent_set_free, + .dsize = concurrent_set_size, }, .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE }; VALUE -rb_ractor_safe_set_new(struct rb_ractor_safe_set_funcs *funcs, int capacity) +rb_concurrent_set_new(struct rb_concurrent_set_funcs *funcs, int capacity) { - struct ractor_safe_set *set; - VALUE obj = TypedData_Make_Struct(0, struct ractor_safe_set, &ractor_safe_set_type, set); + struct concurrent_set *set; + VALUE obj = TypedData_Make_Struct(0, struct concurrent_set, &concurrent_set_type, set); set->funcs = funcs; - set->entries = ZALLOC_N(struct ractor_safe_set_entry, capacity); + set->entries = ZALLOC_N(struct concurrent_set_entry, capacity); set->capacity = capacity; return obj; } -struct ractor_safe_set_probe { +struct concurrent_set_probe { int idx; int d; int mask; }; static int -ractor_safe_set_probe_start(struct ractor_safe_set_probe *probe, struct ractor_safe_set *set, VALUE hash) +concurrent_set_probe_start(struct concurrent_set_probe *probe, struct concurrent_set *set, VALUE hash) { RUBY_ASSERT((set->capacity & (set->capacity - 1)) == 0); probe->d = 0; @@ -78,7 +78,7 @@ ractor_safe_set_probe_start(struct ractor_safe_set_probe *probe, struct ractor_s } static int -ractor_safe_set_probe_next(struct ractor_safe_set_probe *probe) +concurrent_set_probe_next(struct concurrent_set_probe *probe) { probe->d++; probe->idx = (probe->idx + probe->d) & probe->mask; @@ -86,20 +86,20 @@ ractor_safe_set_probe_next(struct ractor_safe_set_probe *probe) } static void -ractor_safe_set_try_resize_without_locking(VALUE old_set_obj, VALUE *set_obj_ptr) +concurrent_set_try_resize_without_locking(VALUE old_set_obj, VALUE *set_obj_ptr) { // Check if another thread has already resized. if (RUBY_ATOMIC_VALUE_LOAD(*set_obj_ptr) != old_set_obj) { return; } - struct ractor_safe_set *old_set = RTYPEDDATA_GET_DATA(old_set_obj); + struct concurrent_set *old_set = RTYPEDDATA_GET_DATA(old_set_obj); // This may overcount by up to the number of threads concurrently attempting to insert // GC may also happen between now and the set being rebuilt int expected_size = RUBY_ATOMIC_LOAD(old_set->size) - old_set->deleted_entries; - struct ractor_safe_set_entry *old_entries = old_set->entries; + struct concurrent_set_entry *old_entries = old_set->entries; int old_capacity = old_set->capacity; int new_capacity = old_capacity * 2; if (new_capacity > expected_size * 8) { @@ -110,15 +110,15 @@ ractor_safe_set_try_resize_without_locking(VALUE old_set_obj, VALUE *set_obj_ptr } // May cause GC and therefore deletes, so must hapen first. - VALUE new_set_obj = rb_ractor_safe_set_new(old_set->funcs, new_capacity); - struct ractor_safe_set *new_set = RTYPEDDATA_GET_DATA(new_set_obj); + VALUE new_set_obj = rb_concurrent_set_new(old_set->funcs, new_capacity); + struct concurrent_set *new_set = RTYPEDDATA_GET_DATA(new_set_obj); for (int i = 0; i < old_capacity; i++) { - struct ractor_safe_set_entry *entry = &old_entries[i]; - VALUE key = RUBY_ATOMIC_VALUE_EXCHANGE(entry->key, RACTOR_SAFE_TABLE_MOVED); - RUBY_ASSERT(key != RACTOR_SAFE_TABLE_MOVED); + struct concurrent_set_entry *entry = &old_entries[i]; + VALUE key = RUBY_ATOMIC_VALUE_EXCHANGE(entry->key, CONCURRENT_SET_MOVED); + RUBY_ASSERT(key != CONCURRENT_SET_MOVED); - if (key < RACTOR_SAFE_TABLE_SPECIAL_VALUE_COUNT) continue; + if (key < CONCURRENT_SET_SPECIAL_VALUE_COUNT) continue; if (rb_objspace_garbage_object_p(key)) continue; VALUE hash = RUBY_ATOMIC_VALUE_LOAD(entry->hash); @@ -130,13 +130,13 @@ ractor_safe_set_try_resize_without_locking(VALUE old_set_obj, VALUE *set_obj_ptr RUBY_ASSERT(hash == old_set->funcs->hash(key)); // Insert key into new_set. - struct ractor_safe_set_probe probe; - int idx = ractor_safe_set_probe_start(&probe, new_set, hash); + struct concurrent_set_probe probe; + int idx = concurrent_set_probe_start(&probe, new_set, hash); while (true) { - struct ractor_safe_set_entry *entry = &new_set->entries[idx]; + struct concurrent_set_entry *entry = &new_set->entries[idx]; - if (entry->key == RACTOR_SAFE_TABLE_EMPTY) { + if (entry->key == CONCURRENT_SET_EMPTY) { new_set->size++; RUBY_ASSERT(new_set->size < new_set->capacity / 2); @@ -147,10 +147,10 @@ ractor_safe_set_try_resize_without_locking(VALUE old_set_obj, VALUE *set_obj_ptr break; } else { - RUBY_ASSERT(entry->key >= RACTOR_SAFE_TABLE_SPECIAL_VALUE_COUNT); + RUBY_ASSERT(entry->key >= CONCURRENT_SET_SPECIAL_VALUE_COUNT); } - idx = ractor_safe_set_probe_next(&probe); + idx = concurrent_set_probe_next(&probe); } } @@ -160,17 +160,17 @@ ractor_safe_set_try_resize_without_locking(VALUE old_set_obj, VALUE *set_obj_ptr } static void -ractor_safe_set_try_resize(VALUE old_set_obj, VALUE *set_obj_ptr) +concurrent_set_try_resize(VALUE old_set_obj, VALUE *set_obj_ptr) { RB_VM_LOCKING() { - ractor_safe_set_try_resize_without_locking(old_set_obj, set_obj_ptr); + concurrent_set_try_resize_without_locking(old_set_obj, set_obj_ptr); } } VALUE -rb_ractor_safe_set_find_or_insert(VALUE *set_obj_ptr, VALUE key, void *data) +rb_concurrent_set_find_or_insert(VALUE *set_obj_ptr, VALUE key, void *data) { - RUBY_ASSERT(key >= RACTOR_SAFE_TABLE_SPECIAL_VALUE_COUNT); + RUBY_ASSERT(key >= CONCURRENT_SET_SPECIAL_VALUE_COUNT); bool inserting = false; VALUE set_obj; @@ -178,18 +178,18 @@ rb_ractor_safe_set_find_or_insert(VALUE *set_obj_ptr, VALUE key, void *data) retry: set_obj = RUBY_ATOMIC_VALUE_LOAD(*set_obj_ptr); RUBY_ASSERT(set_obj); - struct ractor_safe_set *set = RTYPEDDATA_GET_DATA(set_obj); + struct concurrent_set *set = RTYPEDDATA_GET_DATA(set_obj); - struct ractor_safe_set_probe probe; + struct concurrent_set_probe probe; VALUE hash = set->funcs->hash(key); - int idx = ractor_safe_set_probe_start(&probe, set, hash); + int idx = concurrent_set_probe_start(&probe, set, hash); while (true) { - struct ractor_safe_set_entry *entry = &set->entries[idx]; + struct concurrent_set_entry *entry = &set->entries[idx]; VALUE curr_key = RUBY_ATOMIC_VALUE_LOAD(entry->key); switch (curr_key) { - case RACTOR_SAFE_TABLE_EMPTY: { + case CONCURRENT_SET_EMPTY: { // Not in set if (!inserting) { key = set->funcs->create(key, data); @@ -200,13 +200,13 @@ rb_ractor_safe_set_find_or_insert(VALUE *set_obj_ptr, VALUE key, void *data) rb_atomic_t prev_size = RUBY_ATOMIC_FETCH_ADD(set->size, 1); if (UNLIKELY(prev_size > set->capacity / 2)) { - ractor_safe_set_try_resize(set_obj, set_obj_ptr); + concurrent_set_try_resize(set_obj, set_obj_ptr); goto retry; } - curr_key = RUBY_ATOMIC_VALUE_CAS(entry->key, RACTOR_SAFE_TABLE_EMPTY, key); - if (curr_key == RACTOR_SAFE_TABLE_EMPTY) { + curr_key = RUBY_ATOMIC_VALUE_CAS(entry->key, CONCURRENT_SET_EMPTY, key); + if (curr_key == CONCURRENT_SET_EMPTY) { RUBY_ATOMIC_VALUE_SET(entry->hash, hash); RB_GC_GUARD(set_obj); @@ -220,9 +220,9 @@ rb_ractor_safe_set_find_or_insert(VALUE *set_obj_ptr, VALUE key, void *data) continue; } } - case RACTOR_SAFE_TABLE_DELETED: + case CONCURRENT_SET_DELETED: break; - case RACTOR_SAFE_TABLE_MOVED: + case CONCURRENT_SET_MOVED: // Wait RB_VM_LOCKING(); @@ -234,7 +234,7 @@ rb_ractor_safe_set_find_or_insert(VALUE *set_obj_ptr, VALUE key, void *data) if (UNLIKELY(rb_objspace_garbage_object_p(curr_key))) { // This is a weakref set, so after marking but before sweeping is complete we may find a matching garbage object. // Skip it and mark it as deleted. - RUBY_ATOMIC_VALUE_CAS(entry->key, curr_key, RACTOR_SAFE_TABLE_DELETED); + RUBY_ATOMIC_VALUE_CAS(entry->key, curr_key, CONCURRENT_SET_DELETED); // Fall through and continue our search. } @@ -248,66 +248,66 @@ rb_ractor_safe_set_find_or_insert(VALUE *set_obj_ptr, VALUE key, void *data) } } - idx = ractor_safe_set_probe_next(&probe); + idx = concurrent_set_probe_next(&probe); } } VALUE -rb_ractor_safe_set_delete_by_identity(VALUE set_obj, VALUE key) +rb_concurrent_set_delete_by_identity(VALUE set_obj, VALUE key) { // Assume locking and barrier (which there is no assert for). ASSERT_vm_locking(); - struct ractor_safe_set *set = RTYPEDDATA_GET_DATA(set_obj); + struct concurrent_set *set = RTYPEDDATA_GET_DATA(set_obj); VALUE hash = set->funcs->hash(key); - struct ractor_safe_set_probe probe; - int idx = ractor_safe_set_probe_start(&probe, set, hash); + struct concurrent_set_probe probe; + int idx = concurrent_set_probe_start(&probe, set, hash); while (true) { - struct ractor_safe_set_entry *entry = &set->entries[idx]; + struct concurrent_set_entry *entry = &set->entries[idx]; VALUE curr_key = RUBY_ATOMIC_VALUE_LOAD(entry->key); switch (curr_key) { - case RACTOR_SAFE_TABLE_EMPTY: + case CONCURRENT_SET_EMPTY: // We didn't find our entry to delete. return 0; - case RACTOR_SAFE_TABLE_DELETED: + case CONCURRENT_SET_DELETED: break; - case RACTOR_SAFE_TABLE_MOVED: - rb_bug("rb_ractor_safe_set_delete_by_identity: moved entry"); + case CONCURRENT_SET_MOVED: + rb_bug("rb_concurrent_set_delete_by_identity: moved entry"); break; default: if (key == curr_key) { - entry->key = RACTOR_SAFE_TABLE_DELETED; + entry->key = CONCURRENT_SET_DELETED; set->deleted_entries++; return curr_key; } break; } - idx = ractor_safe_set_probe_next(&probe); + idx = concurrent_set_probe_next(&probe); } } void -rb_ractor_safe_set_foreach_with_replace(VALUE set_obj, int (*callback)(VALUE *key, void *data), void *data) +rb_concurrent_set_foreach_with_replace(VALUE set_obj, int (*callback)(VALUE *key, void *data), void *data) { // Assume locking and barrier (which there is no assert for). ASSERT_vm_locking(); - struct ractor_safe_set *set = RTYPEDDATA_GET_DATA(set_obj); + struct concurrent_set *set = RTYPEDDATA_GET_DATA(set_obj); for (unsigned int i = 0; i < set->capacity; i++) { VALUE key = set->entries[i].key; switch (key) { - case RACTOR_SAFE_TABLE_EMPTY: - case RACTOR_SAFE_TABLE_DELETED: + case CONCURRENT_SET_EMPTY: + case CONCURRENT_SET_DELETED: continue; - case RACTOR_SAFE_TABLE_MOVED: - rb_bug("rb_ractor_safe_set_foreach_with_replace: moved entry"); + case CONCURRENT_SET_MOVED: + rb_bug("rb_concurrent_set_foreach_with_replace: moved entry"); break; default: { int ret = callback(&set->entries[i].key, data); @@ -315,7 +315,7 @@ rb_ractor_safe_set_foreach_with_replace(VALUE set_obj, int (*callback)(VALUE *ke case ST_STOP: return; case ST_DELETE: - set->entries[i].key = RACTOR_SAFE_TABLE_DELETED; + set->entries[i].key = CONCURRENT_SET_DELETED; break; } break; diff --git a/internal/concurrent_set.h b/internal/concurrent_set.h new file mode 100644 index 0000000000..3000fc31bf --- /dev/null +++ b/internal/concurrent_set.h @@ -0,0 +1,21 @@ +#ifndef RUBY_RACTOR_SAFE_TABLE_H +#define RUBY_RACTOR_SAFE_TABLE_H + +#include "ruby/ruby.h" + +typedef VALUE (*rb_concurrent_set_hash_func)(VALUE key); +typedef bool (*rb_concurrent_set_cmp_func)(VALUE a, VALUE b); +typedef VALUE (*rb_concurrent_set_create_func)(VALUE key, void *data); + +struct rb_concurrent_set_funcs { + rb_concurrent_set_hash_func hash; + rb_concurrent_set_cmp_func cmp; + rb_concurrent_set_create_func create; +}; + +VALUE rb_concurrent_set_new(struct rb_concurrent_set_funcs *funcs, int capacity); +VALUE rb_concurrent_set_find_or_insert(VALUE *set_obj_ptr, VALUE key, void *data); +VALUE rb_concurrent_set_delete_by_identity(VALUE set_obj, VALUE key); +void rb_concurrent_set_foreach_with_replace(VALUE set_obj, int (*callback)(VALUE *key, void *data), void *data); + +#endif diff --git a/internal/ractor_safe_set.h b/internal/ractor_safe_set.h deleted file mode 100644 index 6875af170a..0000000000 --- a/internal/ractor_safe_set.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef RUBY_RACTOR_SAFE_TABLE_H -#define RUBY_RACTOR_SAFE_TABLE_H - -#include "ruby/ruby.h" - -typedef VALUE (*rb_ractor_safe_set_hash_func)(VALUE key); -typedef bool (*rb_ractor_safe_set_cmp_func)(VALUE a, VALUE b); -typedef VALUE (*rb_ractor_safe_set_create_func)(VALUE key, void *data); - -struct rb_ractor_safe_set_funcs { - rb_ractor_safe_set_hash_func hash; - rb_ractor_safe_set_cmp_func cmp; - rb_ractor_safe_set_create_func create; -}; - -VALUE rb_ractor_safe_set_new(struct rb_ractor_safe_set_funcs *funcs, int capacity); -VALUE rb_ractor_safe_set_find_or_insert(VALUE *set_obj_ptr, VALUE key, void *data); -VALUE rb_ractor_safe_set_delete_by_identity(VALUE set_obj, VALUE key); -void rb_ractor_safe_set_foreach_with_replace(VALUE set_obj, int (*callback)(VALUE *key, void *data), void *data); - -#endif @@ -35,7 +35,7 @@ #include "internal/numeric.h" #include "internal/object.h" #include "internal/proc.h" -#include "internal/ractor_safe_set.h" +#include "internal/concurrent_set.h" #include "internal/re.h" #include "internal/sanitizers.h" #include "internal/string.h" @@ -440,7 +440,7 @@ rb_fstring(VALUE str) static VALUE fstring_table_obj; static VALUE -fstring_ractor_safe_set_hash(VALUE str) +fstring_concurrent_set_hash(VALUE str) { #ifdef PRECOMPUTED_FAKESTR_HASH st_index_t h; @@ -460,7 +460,7 @@ fstring_ractor_safe_set_hash(VALUE str) } static bool -fstring_ractor_safe_set_cmp(VALUE a, VALUE b) +fstring_concurrent_set_cmp(VALUE a, VALUE b) { long alen, blen; const char *aptr, *bptr; @@ -481,7 +481,7 @@ struct fstr_create_arg { }; static VALUE -fstring_ractor_safe_set_create(VALUE str, void *data) +fstring_concurrent_set_create(VALUE str, void *data) { struct fstr_create_arg *arg = data; @@ -548,16 +548,16 @@ fstring_ractor_safe_set_create(VALUE str, void *data) return str; } -static struct rb_ractor_safe_set_funcs fstring_ractor_safe_set_funcs = { - .hash = fstring_ractor_safe_set_hash, - .cmp = fstring_ractor_safe_set_cmp, - .create = fstring_ractor_safe_set_create, +static struct rb_concurrent_set_funcs fstring_concurrent_set_funcs = { + .hash = fstring_concurrent_set_hash, + .cmp = fstring_concurrent_set_cmp, + .create = fstring_concurrent_set_create, }; void Init_fstring_table(void) { - fstring_table_obj = rb_ractor_safe_set_new(&fstring_ractor_safe_set_funcs, 8192); + fstring_table_obj = rb_concurrent_set_new(&fstring_concurrent_set_funcs, 8192); rb_gc_register_address(&fstring_table_obj); } @@ -577,7 +577,7 @@ register_fstring(VALUE str, bool copy, bool force_precompute_hash) } #endif - VALUE result = rb_ractor_safe_set_find_or_insert(&fstring_table_obj, str, &args); + VALUE result = rb_concurrent_set_find_or_insert(&fstring_table_obj, str, &args); RUBY_ASSERT(!rb_objspace_garbage_object_p(result)); RUBY_ASSERT(RB_TYPE_P(result, T_STRING)); @@ -602,7 +602,7 @@ rb_gc_free_fstring(VALUE obj) // Assume locking and barrier (which there is no assert for) ASSERT_vm_locking(); - rb_ractor_safe_set_delete_by_identity(fstring_table_obj, obj); + rb_concurrent_set_delete_by_identity(fstring_table_obj, obj); RB_DEBUG_COUNTER_INC(obj_str_fstr); @@ -613,7 +613,7 @@ void rb_fstring_foreach_with_replace(int (*callback)(VALUE *str, void *data), void *data) { if (fstring_table_obj) { - rb_ractor_safe_set_foreach_with_replace(fstring_table_obj, callback, data); + rb_concurrent_set_foreach_with_replace(fstring_table_obj, callback, data); } } @@ -12718,7 +12718,7 @@ Init_String(void) { rb_cString = rb_define_class("String", rb_cObject); - rb_ractor_safe_set_foreach_with_replace(fstring_table_obj, fstring_set_class_i, NULL); + rb_concurrent_set_foreach_with_replace(fstring_table_obj, fstring_set_class_i, NULL); rb_include_module(rb_cString, rb_mComparable); rb_define_alloc_func(rb_cString, empty_str_alloc); |
