summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authornagachika <nagachika@ruby-lang.org>2023-03-21 15:32:44 +0900
committernagachika <nagachika@ruby-lang.org>2023-03-21 15:32:44 +0900
commit26b3f0b6a9489860e1d312369d784495b080daa3 (patch)
treef29019fd31aa6947db4318a2b2e9d2c599c81729 /internal
parent485e0e46a58ff1a28eecd63b804b3dbea4b95b98 (diff)
merge revision(s) 8ce2fb9bbbaea14737c84385b1573f743a30f773,3a0f6ce1d31eefd8af01b50f3632a64d64e8f8c1: [Backport #19415]
Only emit circular dependency warning for owned thread shields [Bug #19415] If multiple threads attemps to load the same file concurrently it's not a circular dependency issue. So we check that the existing ThreadShield is owner by the current fiber before warning about circular dependencies. --- internal/thread.h | 1 + load.c | 3 ++- spec/ruby/core/kernel/shared/require.rb | 11 +++++++++++ spec/ruby/fixtures/code/concurrent_require_fixture.rb | 4 ++++ test/ruby/test_require.rb | 3 --- thread.c | 11 +++++++++++ 6 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 spec/ruby/fixtures/code/concurrent_require_fixture.rb Use Thread.pass until thread.stop? to wait for thread to block [Bug #19415] It should be more reliable --- spec/ruby/fixtures/code/concurrent_require_fixture.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Diffstat (limited to 'internal')
-rw-r--r--internal/thread.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/internal/thread.h b/internal/thread.h
index 919ad96580..c7fe16eb6b 100644
--- a/internal/thread.h
+++ b/internal/thread.h
@@ -28,6 +28,7 @@ VALUE rb_get_coverages(void);
int rb_get_coverage_mode(void);
VALUE rb_default_coverage(int);
VALUE rb_thread_shield_new(void);
+bool rb_thread_shield_owned(VALUE self);
VALUE rb_thread_shield_wait(VALUE self);
VALUE rb_thread_shield_release(VALUE self);
VALUE rb_thread_shield_destroy(VALUE self);