summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common.mk28
-rw-r--r--cont.c2
-rw-r--r--debug.c2
-rw-r--r--encoding.c1
-rw-r--r--eval.c2
-rw-r--r--ext/ripper/depend2
-rw-r--r--gc.c2
-rw-r--r--include/ruby/ractor.h45
-rw-r--r--include/ruby/thread_native.h17
-rw-r--r--io.c2
-rw-r--r--parse.y2
-rw-r--r--process.c2
-rw-r--r--ractor.c5
-rw-r--r--ractor_core.h (renamed from ractor.h)16
-rw-r--r--ractor_pub.h52
-rw-r--r--thread.c2
-rw-r--r--thread_pthread.h14
-rw-r--r--thread_win32.c39
-rw-r--r--thread_win32.h11
-rw-r--r--variable.c2
-rw-r--r--vm.c2
-rw-r--r--vm_dump.c2
-rw-r--r--vm_sync.c2
23 files changed, 120 insertions, 134 deletions
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 <pthread.h>
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
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,41 +323,30 @@ 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
}
-void
-rb_native_mutex_unlock(rb_nativethread_lock_t *lock)
+int
+rb_native_mutex_trylock(rb_nativethread_lock_t *lock)
{
#if USE_WIN32_MUTEX
- thread_debug("release mutex: %p\n", lock->mutex);
- ReleaseMutex(lock->mutex);
+ return w32_mutex_lock(lock->mutex, true);
#else
- LeaveCriticalSection(&lock->crit);
+ return TryEnterCriticalSection(&lock->crit) == 0 ? EBUSY : 0;
#endif
}
-RBIMPL_ATTR_MAYBE_UNUSED()
-static int
-native_mutex_trylock(rb_nativethread_lock_t *lock)
+void
+rb_native_mutex_unlock(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;
+ thread_debug("release mutex: %p\n", lock->mutex);
+ ReleaseMutex(lock->mutex);
#else
- return TryEnterCriticalSection(&lock->crit) == 0;
+ LeaveCriticalSection(&lock->crit);
#endif
}
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"