diff --git a/common.mk b/common.mk index 46d18063a3..7e585d3fff 100644 --- a/common.mk +++ b/common.mk @@ -3372,7 +3372,7 @@ cont.$(OBJEXT): {$(VPATH)}missing.h cont.$(OBJEXT): {$(VPATH)}mjit.h cont.$(OBJEXT): {$(VPATH)}node.h cont.$(OBJEXT): {$(VPATH)}ractor.h -cont.$(OBJEXT): {$(VPATH)}ractor_pub.h +cont.$(OBJEXT): {$(VPATH)}ractor_core.h cont.$(OBJEXT): {$(VPATH)}ruby_assert.h cont.$(OBJEXT): {$(VPATH)}ruby_atomic.h cont.$(OBJEXT): {$(VPATH)}st.h @@ -3566,7 +3566,7 @@ debug.$(OBJEXT): {$(VPATH)}node.h debug.$(OBJEXT): {$(VPATH)}onigmo.h debug.$(OBJEXT): {$(VPATH)}oniguruma.h debug.$(OBJEXT): {$(VPATH)}ractor.h -debug.$(OBJEXT): {$(VPATH)}ractor_pub.h +debug.$(OBJEXT): {$(VPATH)}ractor_core.h debug.$(OBJEXT): {$(VPATH)}ruby_assert.h debug.$(OBJEXT): {$(VPATH)}ruby_atomic.h debug.$(OBJEXT): {$(VPATH)}st.h @@ -4622,7 +4622,6 @@ encoding.$(OBJEXT): {$(VPATH)}missing.h encoding.$(OBJEXT): {$(VPATH)}node.h encoding.$(OBJEXT): {$(VPATH)}onigmo.h encoding.$(OBJEXT): {$(VPATH)}oniguruma.h -encoding.$(OBJEXT): {$(VPATH)}ractor_pub.h encoding.$(OBJEXT): {$(VPATH)}regenc.h encoding.$(OBJEXT): {$(VPATH)}ruby_assert.h encoding.$(OBJEXT): {$(VPATH)}st.h @@ -5402,7 +5401,7 @@ eval.$(OBJEXT): {$(VPATH)}probes.dmyh eval.$(OBJEXT): {$(VPATH)}probes.h eval.$(OBJEXT): {$(VPATH)}probes_helper.h eval.$(OBJEXT): {$(VPATH)}ractor.h -eval.$(OBJEXT): {$(VPATH)}ractor_pub.h +eval.$(OBJEXT): {$(VPATH)}ractor_core.h eval.$(OBJEXT): {$(VPATH)}ruby_assert.h eval.$(OBJEXT): {$(VPATH)}ruby_atomic.h eval.$(OBJEXT): {$(VPATH)}st.h @@ -5824,7 +5823,7 @@ gc.$(OBJEXT): {$(VPATH)}oniguruma.h gc.$(OBJEXT): {$(VPATH)}probes.dmyh gc.$(OBJEXT): {$(VPATH)}probes.h gc.$(OBJEXT): {$(VPATH)}ractor.h -gc.$(OBJEXT): {$(VPATH)}ractor_pub.h +gc.$(OBJEXT): {$(VPATH)}ractor_core.h gc.$(OBJEXT): {$(VPATH)}re.h gc.$(OBJEXT): {$(VPATH)}regenc.h gc.$(OBJEXT): {$(VPATH)}regex.h @@ -6744,7 +6743,7 @@ io.$(OBJEXT): {$(VPATH)}missing.h io.$(OBJEXT): {$(VPATH)}node.h io.$(OBJEXT): {$(VPATH)}onigmo.h io.$(OBJEXT): {$(VPATH)}oniguruma.h -io.$(OBJEXT): {$(VPATH)}ractor_pub.h +io.$(OBJEXT): {$(VPATH)}ractor.h io.$(OBJEXT): {$(VPATH)}ruby_assert.h io.$(OBJEXT): {$(VPATH)}ruby_atomic.h io.$(OBJEXT): {$(VPATH)}st.h @@ -9756,7 +9755,7 @@ parse.$(OBJEXT): {$(VPATH)}parse.h parse.$(OBJEXT): {$(VPATH)}parse.y parse.$(OBJEXT): {$(VPATH)}probes.dmyh parse.$(OBJEXT): {$(VPATH)}probes.h -parse.$(OBJEXT): {$(VPATH)}ractor_pub.h +parse.$(OBJEXT): {$(VPATH)}ractor.h parse.$(OBJEXT): {$(VPATH)}regenc.h parse.$(OBJEXT): {$(VPATH)}regex.h parse.$(OBJEXT): {$(VPATH)}ruby_assert.h @@ -10179,7 +10178,7 @@ process.$(OBJEXT): {$(VPATH)}node.h process.$(OBJEXT): {$(VPATH)}onigmo.h process.$(OBJEXT): {$(VPATH)}oniguruma.h process.$(OBJEXT): {$(VPATH)}process.c -process.$(OBJEXT): {$(VPATH)}ractor_pub.h +process.$(OBJEXT): {$(VPATH)}ractor.h process.$(OBJEXT): {$(VPATH)}ruby_assert.h process.$(OBJEXT): {$(VPATH)}ruby_atomic.h process.$(OBJEXT): {$(VPATH)}st.h @@ -10384,7 +10383,7 @@ ractor.$(OBJEXT): {$(VPATH)}ractor.c ractor.$(OBJEXT): {$(VPATH)}ractor.h ractor.$(OBJEXT): {$(VPATH)}ractor.rb ractor.$(OBJEXT): {$(VPATH)}ractor.rbinc -ractor.$(OBJEXT): {$(VPATH)}ractor_pub.h +ractor.$(OBJEXT): {$(VPATH)}ractor_core.h ractor.$(OBJEXT): {$(VPATH)}ruby_assert.h ractor.$(OBJEXT): {$(VPATH)}ruby_atomic.h ractor.$(OBJEXT): {$(VPATH)}st.h @@ -14180,7 +14179,7 @@ thread.$(OBJEXT): {$(VPATH)}node.h thread.$(OBJEXT): {$(VPATH)}onigmo.h thread.$(OBJEXT): {$(VPATH)}oniguruma.h thread.$(OBJEXT): {$(VPATH)}ractor.h -thread.$(OBJEXT): {$(VPATH)}ractor_pub.h +thread.$(OBJEXT): {$(VPATH)}ractor_core.h thread.$(OBJEXT): {$(VPATH)}ruby_assert.h thread.$(OBJEXT): {$(VPATH)}ruby_atomic.h thread.$(OBJEXT): {$(VPATH)}st.h @@ -14738,7 +14737,6 @@ transient_heap.$(OBJEXT): {$(VPATH)}internal/xmalloc.h transient_heap.$(OBJEXT): {$(VPATH)}method.h transient_heap.$(OBJEXT): {$(VPATH)}missing.h transient_heap.$(OBJEXT): {$(VPATH)}node.h -transient_heap.$(OBJEXT): {$(VPATH)}ractor_pub.h transient_heap.$(OBJEXT): {$(VPATH)}ruby_assert.h transient_heap.$(OBJEXT): {$(VPATH)}ruby_atomic.h transient_heap.$(OBJEXT): {$(VPATH)}st.h @@ -15106,7 +15104,7 @@ variable.$(OBJEXT): {$(VPATH)}node.h variable.$(OBJEXT): {$(VPATH)}onigmo.h variable.$(OBJEXT): {$(VPATH)}oniguruma.h variable.$(OBJEXT): {$(VPATH)}ractor.h -variable.$(OBJEXT): {$(VPATH)}ractor_pub.h +variable.$(OBJEXT): {$(VPATH)}ractor_core.h variable.$(OBJEXT): {$(VPATH)}ruby_assert.h variable.$(OBJEXT): {$(VPATH)}ruby_atomic.h variable.$(OBJEXT): {$(VPATH)}st.h @@ -15520,7 +15518,7 @@ vm.$(OBJEXT): {$(VPATH)}probes.dmyh vm.$(OBJEXT): {$(VPATH)}probes.h vm.$(OBJEXT): {$(VPATH)}probes_helper.h vm.$(OBJEXT): {$(VPATH)}ractor.h -vm.$(OBJEXT): {$(VPATH)}ractor_pub.h +vm.$(OBJEXT): {$(VPATH)}ractor_core.h vm.$(OBJEXT): {$(VPATH)}ruby_assert.h vm.$(OBJEXT): {$(VPATH)}ruby_atomic.h vm.$(OBJEXT): {$(VPATH)}st.h @@ -15912,7 +15910,7 @@ vm_dump.$(OBJEXT): {$(VPATH)}missing.h vm_dump.$(OBJEXT): {$(VPATH)}node.h vm_dump.$(OBJEXT): {$(VPATH)}procstat_vm.c vm_dump.$(OBJEXT): {$(VPATH)}ractor.h -vm_dump.$(OBJEXT): {$(VPATH)}ractor_pub.h +vm_dump.$(OBJEXT): {$(VPATH)}ractor_core.h vm_dump.$(OBJEXT): {$(VPATH)}ruby_assert.h vm_dump.$(OBJEXT): {$(VPATH)}ruby_atomic.h vm_dump.$(OBJEXT): {$(VPATH)}st.h @@ -16108,7 +16106,7 @@ vm_sync.$(OBJEXT): {$(VPATH)}missing.h vm_sync.$(OBJEXT): {$(VPATH)}node.h vm_sync.$(OBJEXT): {$(VPATH)}procstat_vm.c vm_sync.$(OBJEXT): {$(VPATH)}ractor.h -vm_sync.$(OBJEXT): {$(VPATH)}ractor_pub.h +vm_sync.$(OBJEXT): {$(VPATH)}ractor_core.h vm_sync.$(OBJEXT): {$(VPATH)}ruby_assert.h vm_sync.$(OBJEXT): {$(VPATH)}ruby_atomic.h vm_sync.$(OBJEXT): {$(VPATH)}st.h diff --git a/cont.c b/cont.c index 88ce28b1af..6c26885fef 100644 --- a/cont.c +++ b/cont.c @@ -29,7 +29,7 @@ #include "mjit.h" #include "vm_core.h" #include "id_table.h" -#include "ractor.h" +#include "ractor_core.h" static const int DEBUG = 0; diff --git a/debug.c b/debug.c index cc6a98a906..deec382fa4 100644 --- a/debug.c +++ b/debug.c @@ -26,7 +26,7 @@ #include "vm_debug.h" #include "vm_callinfo.h" #include "ruby/thread_native.h" -#include "ractor.h" +#include "ractor_core.h" /* This is the only place struct RIMemo is actually used */ struct RIMemo { diff --git a/encoding.c b/encoding.c index 7336421862..e1441caec2 100644 --- a/encoding.c +++ b/encoding.c @@ -26,7 +26,6 @@ #include "ruby/encoding.h" #include "ruby/util.h" #include "ruby_assert.h" -#include "ractor_pub.h" #include "vm_sync.h" #ifndef ENC_DEBUG diff --git a/eval.c b/eval.c index a77fb660bc..be1337601f 100644 --- a/eval.c +++ b/eval.c @@ -37,7 +37,7 @@ #include "probes_helper.h" #include "ruby/vm.h" #include "vm_core.h" -#include "ractor.h" +#include "ractor_core.h" NORETURN(void rb_raise_jump(VALUE, VALUE)); void rb_ec_clear_current_thread_trace_func(const rb_execution_context_t *ec); diff --git a/ext/ripper/depend b/ext/ripper/depend index bfd6738928..4ce522fbc3 100644 --- a/ext/ripper/depend +++ b/ext/ripper/depend @@ -210,6 +210,7 @@ ripper.o: $(hdrdir)/ruby/io.h ripper.o: $(hdrdir)/ruby/missing.h ripper.o: $(hdrdir)/ruby/onigmo.h ripper.o: $(hdrdir)/ruby/oniguruma.h +ripper.o: $(hdrdir)/ruby/ractor.h ripper.o: $(hdrdir)/ruby/regex.h ripper.o: $(hdrdir)/ruby/ruby.h ripper.o: $(hdrdir)/ruby/st.h @@ -244,7 +245,6 @@ ripper.o: $(top_srcdir)/internal/variable.h ripper.o: $(top_srcdir)/internal/vm.h ripper.o: $(top_srcdir)/internal/warnings.h ripper.o: $(top_srcdir)/node.h -ripper.o: $(top_srcdir)/ractor_pub.h ripper.o: $(top_srcdir)/regenc.h ripper.o: $(top_srcdir)/ruby_assert.h ripper.o: $(top_srcdir)/symbol.h diff --git a/gc.c b/gc.c index a41160abe6..3dbeeece72 100644 --- a/gc.c +++ b/gc.c @@ -112,7 +112,7 @@ #include "vm_core.h" #include "vm_sync.h" #include "vm_callinfo.h" -#include "ractor.h" +#include "ractor_core.h" #include "builtin.h" diff --git a/include/ruby/ractor.h b/include/ruby/ractor.h new file mode 100644 index 0000000000..6908c0a453 --- /dev/null +++ b/include/ruby/ractor.h @@ -0,0 +1,45 @@ +#ifndef RUBY_RACTOR_H +#define RUBY_RACTOR_H 1 + +/** + * @file + * @author Koichi Sasada + * @date Tue Nov 17 16:39:15 2020 + * @copyright Copyright (C) 2020 Yukihiro Matsumoto + * @copyright This file is a part of the programming language Ruby. + * Permission is hereby granted, to either redistribute and/or + * modify this file, provided that the conditions mentioned in the + * file COPYING are met. Consult the file for details. + */ + +RUBY_SYMBOL_EXPORT_BEGIN +RUBY_EXTERN VALUE rb_cRactor; + +VALUE rb_ractor_stdin(void); +VALUE rb_ractor_stdout(void); +VALUE rb_ractor_stderr(void); +void rb_ractor_stdin_set(VALUE); +void rb_ractor_stdout_set(VALUE); +void rb_ractor_stderr_set(VALUE); + +bool rb_ractor_shareable_p_continue(VALUE obj); // do not call it directly. + +RUBY_SYMBOL_EXPORT_END + +#define RB_OBJ_SHAREABLE_P(obj) FL_TEST_RAW((obj), RUBY_FL_SHAREABLE) + +static inline bool +rb_ractor_shareable_p(VALUE obj) +{ + if (SPECIAL_CONST_P(obj)) { + return true; + } + else if (RB_OBJ_SHAREABLE_P(obj)) { + return true; + } + else { + return rb_ractor_shareable_p_continue(obj); + } +} + +#endif /* RUBY_RACTOR_H */ diff --git a/include/ruby/thread_native.h b/include/ruby/thread_native.h index 0285c8ff40..7e08c2e97f 100644 --- a/include/ruby/thread_native.h +++ b/include/ruby/thread_native.h @@ -31,10 +31,14 @@ typedef union rb_thread_lock_union { CRITICAL_SECTION crit; } rb_nativethread_lock_t; +typedef struct rb_thread_cond_struct rb_nativethread_cond_t; + #elif defined(HAVE_PTHREAD_H) + #include typedef pthread_t rb_nativethread_id_t; typedef pthread_mutex_t rb_nativethread_lock_t; +typedef pthread_cond_t rb_nativethread_cond_t; #else #error "unsupported thread type" @@ -50,6 +54,19 @@ void rb_nativethread_lock_destroy(rb_nativethread_lock_t *lock); void rb_nativethread_lock_lock(rb_nativethread_lock_t *lock); void rb_nativethread_lock_unlock(rb_nativethread_lock_t *lock); +void rb_native_mutex_lock(rb_nativethread_lock_t *lock); +int rb_native_mutex_trylock(rb_nativethread_lock_t *lock); +void rb_native_mutex_unlock(rb_nativethread_lock_t *lock); +void rb_native_mutex_initialize(rb_nativethread_lock_t *lock); +void rb_native_mutex_destroy(rb_nativethread_lock_t *lock); + +void rb_native_cond_signal(rb_nativethread_cond_t *cond); +void rb_native_cond_broadcast(rb_nativethread_cond_t *cond); +void rb_native_cond_wait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex); +void rb_native_cond_timedwait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex, unsigned long msec); +void rb_native_cond_initialize(rb_nativethread_cond_t *cond); +void rb_native_cond_destroy(rb_nativethread_cond_t *cond); + RUBY_SYMBOL_EXPORT_END #endif diff --git a/io.c b/io.c index 95a4c7d35e..ca59729e7a 100644 --- a/io.c +++ b/io.c @@ -134,7 +134,7 @@ #include "ruby/thread.h" #include "ruby/util.h" #include "ruby_atomic.h" -#include "ractor_pub.h" +#include "ruby/ractor.h" #if !USE_POLL # include "vm_core.h" diff --git a/parse.y b/parse.y index 27da6bdcf9..9f7d1cd3b7 100644 --- a/parse.y +++ b/parse.y @@ -57,8 +57,8 @@ struct lex_context { #include "ruby/ruby.h" #include "ruby/st.h" #include "ruby/util.h" +#include "ruby/ractor.h" #include "symbol.h" -#include "ractor_pub.h" #define AREF(ary, i) RARRAY_AREF(ary, i) diff --git a/process.c b/process.c index d96d1e8374..bcb85ef12f 100644 --- a/process.c +++ b/process.c @@ -114,7 +114,7 @@ int initgroups(const char *, rb_gid_t); #include "ruby/thread.h" #include "ruby/util.h" #include "vm_core.h" -#include "ractor_pub.h" +#include "ruby/ractor.h" /* define system APIs */ #ifdef _WIN32 diff --git a/ractor.c b/ractor.c index 1e32c1b95e..226c9bbf6f 100644 --- a/ractor.c +++ b/ractor.c @@ -2,10 +2,11 @@ #include "ruby/ruby.h" #include "ruby/thread.h" +#include "ruby/ractor.h" #include "ruby/thread_native.h" #include "vm_core.h" #include "vm_sync.h" -#include "ractor.h" +#include "ractor_core.h" #include "internal/complex.h" #include "internal/error.h" #include "internal/hash.h" @@ -14,7 +15,7 @@ #include "variable.h" #include "gc.h" -static VALUE rb_cRactor; +VALUE rb_cRactor; static VALUE rb_eRactorError; static VALUE rb_eRactorRemoteError; static VALUE rb_eRactorMovedError; diff --git a/ractor.h b/ractor_core.h similarity index 96% rename from ractor.h rename to ractor_core.h index 6e2f09f9b3..41bd14faad 100644 --- a/ractor.h +++ b/ractor_core.h @@ -1,8 +1,8 @@ #include "ruby/ruby.h" +#include "ruby/ractor.h" #include "vm_core.h" #include "id_table.h" #include "vm_debug.h" -#include "ractor_pub.h" #ifndef RACTOR_CHECK_MODE #define RACTOR_CHECK_MODE (0 || VM_CHECK_MODE || RUBY_DEBUG) @@ -158,6 +158,20 @@ void rb_ractor_blocking_threads_dec(rb_ractor_t *r, const char *file, int line); void rb_ractor_vm_barrier_interrupt_running_thread(rb_ractor_t *r); void rb_ractor_terminate_interrupt_main_thread(rb_ractor_t *r); void rb_ractor_terminate_all(void); +bool rb_ractor_main_p_(void); + +RUBY_EXTERN bool ruby_multi_ractor; + +static inline bool +rb_ractor_main_p(void) +{ + if (!ruby_multi_ractor) { + return true; + } + else { + return rb_ractor_main_p_(); + } +} static inline bool rb_ractor_status_p(rb_ractor_t *r, enum ractor_status status) diff --git a/ractor_pub.h b/ractor_pub.h deleted file mode 100644 index f2869276f6..0000000000 --- a/ractor_pub.h +++ /dev/null @@ -1,52 +0,0 @@ -#ifndef RACTOR_PUB_INCLUDED -#define RACTOR_PUB_INCLUDED - -RUBY_EXTERN bool ruby_multi_ractor; - -bool rb_ractor_main_p_(void); - -static inline bool -rb_ractor_main_p(void) -{ - if (!ruby_multi_ractor) { - return true; - } - else { - return rb_ractor_main_p_(); - } -} - -bool rb_ractor_shareable_p_continue(VALUE obj); - -#define RB_OBJ_SHAREABLE_P(obj) FL_TEST_RAW((obj), RUBY_FL_SHAREABLE) - -// TODO: deep frozen - -static inline bool -rb_ractor_shareable_p(VALUE obj) -{ - if (SPECIAL_CONST_P(obj)) { - return true; - } - else if (RB_OBJ_SHAREABLE_P(obj)) { - return true; - } - else { - return rb_ractor_shareable_p_continue(obj); - } -} - -VALUE rb_ractor_make_shareable(VALUE obj); - -RUBY_SYMBOL_EXPORT_BEGIN - -VALUE rb_ractor_stdin(void); -VALUE rb_ractor_stdout(void); -VALUE rb_ractor_stderr(void); -void rb_ractor_stdin_set(VALUE); -void rb_ractor_stdout_set(VALUE); -void rb_ractor_stderr_set(VALUE); - -RUBY_SYMBOL_EXPORT_END - -#endif diff --git a/thread.c b/thread.c index ad1f4764bb..674737640f 100644 --- a/thread.c +++ b/thread.c @@ -94,7 +94,7 @@ #include "ruby/thread_native.h" #include "timev.h" #include "vm_core.h" -#include "ractor.h" +#include "ractor_core.h" #include "vm_debug.h" #include "vm_sync.h" diff --git a/thread_pthread.h b/thread_pthread.h index fa375b3e55..1d6ea1385f 100644 --- a/thread_pthread.h +++ b/thread_pthread.h @@ -17,8 +17,6 @@ #define RB_NATIVETHREAD_LOCK_INIT PTHREAD_MUTEX_INITIALIZER #define RB_NATIVETHREAD_COND_INIT PTHREAD_COND_INITIALIZER -typedef pthread_cond_t rb_nativethread_cond_t; - typedef struct native_thread_data_struct { union { struct list_node ubf; @@ -39,18 +37,6 @@ typedef struct native_thread_data_struct { } cond; } native_thread_data_t; -void rb_native_mutex_lock(rb_nativethread_lock_t *lock); -int rb_native_mutex_trylock(rb_nativethread_lock_t *lock); -void rb_native_mutex_unlock(rb_nativethread_lock_t *lock); -void rb_native_mutex_initialize(rb_nativethread_lock_t *lock); -void rb_native_mutex_destroy(rb_nativethread_lock_t *lock); -void rb_native_cond_signal(rb_nativethread_cond_t *cond); -void rb_native_cond_broadcast(rb_nativethread_cond_t *cond); -void rb_native_cond_wait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex); -void rb_native_cond_timedwait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex, unsigned long msec); -void rb_native_cond_initialize(rb_nativethread_cond_t *cond); -void rb_native_cond_destroy(rb_nativethread_cond_t *cond); - #undef except #undef try #undef leave diff --git a/thread_win32.c b/thread_win32.c index 132e52cae3..f4b4ea214c 100644 --- a/thread_win32.c +++ b/thread_win32.c @@ -52,12 +52,12 @@ w32_error(const char *func) } static int -w32_mutex_lock(HANDLE lock) +w32_mutex_lock(HANDLE lock, bool try) { DWORD result; while (1) { thread_debug("rb_native_mutex_lock: %p\n", lock); - result = w32_wait_events(&lock, 1, INFINITE, 0); + result = w32_wait_events(&lock, 1, try ? 0 : INFINITE, 0); switch (result) { case WAIT_OBJECT_0: /* get mutex object */ @@ -70,7 +70,7 @@ w32_mutex_lock(HANDLE lock) return 0; case WAIT_TIMEOUT: thread_debug("timeout mutex: %p\n", lock); - break; + return EBUSY; case WAIT_ABANDONED: rb_bug("win32_mutex_lock: WAIT_ABANDONED"); break; @@ -97,7 +97,7 @@ w32_mutex_create(void) static void gvl_acquire(rb_global_vm_lock_t *gvl, rb_thread_t *th) { - w32_mutex_lock(gvl->lock); + w32_mutex_lock(gvl->lock, false); if (GVL_DEBUG) fprintf(stderr, "gvl acquire (%p): acquire\n", th); } @@ -323,12 +323,22 @@ void rb_native_mutex_lock(rb_nativethread_lock_t *lock) { #if USE_WIN32_MUTEX - w32_mutex_lock(lock->mutex); + w32_mutex_lock(lock->mutex, false); #else EnterCriticalSection(&lock->crit); #endif } +int +rb_native_mutex_trylock(rb_nativethread_lock_t *lock) +{ +#if USE_WIN32_MUTEX + return w32_mutex_lock(lock->mutex, true); +#else + return TryEnterCriticalSection(&lock->crit) == 0 ? EBUSY : 0; +#endif +} + void rb_native_mutex_unlock(rb_nativethread_lock_t *lock) { @@ -340,27 +350,6 @@ rb_native_mutex_unlock(rb_nativethread_lock_t *lock) #endif } -RBIMPL_ATTR_MAYBE_UNUSED() -static int -native_mutex_trylock(rb_nativethread_lock_t *lock) -{ -#if USE_WIN32_MUTEX - int result; - thread_debug("native_mutex_trylock: %p\n", lock->mutex); - result = w32_wait_events(&lock->mutex, 1, 1, 0); - thread_debug("native_mutex_trylock result: %d\n", result); - switch (result) { - case WAIT_OBJECT_0: - return 0; - case WAIT_TIMEOUT: - return EBUSY; - } - return EINVAL; -#else - return TryEnterCriticalSection(&lock->crit) == 0; -#endif -} - void rb_native_mutex_initialize(rb_nativethread_lock_t *lock) { diff --git a/thread_win32.h b/thread_win32.h index bc8eea7801..f0294ee7f6 100644 --- a/thread_win32.h +++ b/thread_win32.h @@ -54,17 +54,6 @@ native_tls_set(native_tls_key_t key, void *ptr) } } -void rb_native_mutex_lock(rb_nativethread_lock_t *lock); -void rb_native_mutex_unlock(rb_nativethread_lock_t *lock); -void rb_native_mutex_initialize(rb_nativethread_lock_t *lock); -void rb_native_mutex_destroy(rb_nativethread_lock_t *lock); -void rb_native_cond_signal(rb_nativethread_cond_t *cond); -void rb_native_cond_broadcast(rb_nativethread_cond_t *cond); -void rb_native_cond_wait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex); -void rb_native_cond_timedwait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex, unsigned long msec); -void rb_native_cond_initialize(rb_nativethread_cond_t *cond); -void rb_native_cond_destroy(rb_nativethread_cond_t *cond); - RUBY_SYMBOL_EXPORT_BEGIN RUBY_EXTERN native_tls_key_t ruby_current_ec_key; RUBY_SYMBOL_EXPORT_END diff --git a/variable.c b/variable.c index 3cead4bc92..9f9813319e 100644 --- a/variable.c +++ b/variable.c @@ -36,7 +36,7 @@ #include "transient_heap.h" #include "variable.h" #include "vm_core.h" -#include "ractor_pub.h" +#include "ractor_core.h" #include "vm_sync.h" typedef void rb_gvar_compact_t(void *var); diff --git a/vm.c b/vm.c index f3a6803ee0..040f0a92eb 100644 --- a/vm.c +++ b/vm.c @@ -35,7 +35,7 @@ #include "vm_debug.h" #include "vm_exec.h" #include "vm_insnhelper.h" -#include "ractor.h" +#include "ractor_core.h" #include "vm_sync.h" #include "builtin.h" diff --git a/vm_dump.c b/vm_dump.c index 88c3207176..15b1b4a4a3 100644 --- a/vm_dump.c +++ b/vm_dump.c @@ -35,7 +35,7 @@ #include "internal/vm.h" #include "iseq.h" #include "vm_core.h" -#include "ractor.h" +#include "ractor_core.h" #define MAX_POSBUF 128 diff --git a/vm_sync.c b/vm_sync.c index 1b9897d807..1ab6c9055a 100644 --- a/vm_sync.c +++ b/vm_sync.c @@ -1,6 +1,6 @@ #include "vm_core.h" #include "vm_sync.h" -#include "ractor.h" +#include "ractor_core.h" #include "vm_debug.h" #include "gc.h"