summaryrefslogtreecommitdiff
path: root/load.c
diff options
context:
space:
mode:
authorJean Boussier <byroot@ruby-lang.org>2023-02-06 12:30:50 +0100
committerJean Boussier <jean.boussier@gmail.com>2023-02-06 19:35:38 +0100
commitfa49651e05a06512e18ccb2f54a7198c9ff579de (patch)
tree76f9cd0a4fc774ea236d33ec4d8b396b0b85da37 /load.c
parent28da9909849dc02abe74de8170fe4036534361ba (diff)
downloadruby-fa49651e05a06512e18ccb2f54a7198c9ff579de.tar.gz
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.
Diffstat (limited to 'load.c')
-rw-r--r--load.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/load.c b/load.c
index ce52e5ef60..0f8d63a37f 100644
--- a/load.c
+++ b/load.c
@@ -850,7 +850,8 @@ load_lock(rb_vm_t *vm, const char *ftptr, bool warn)
st_insert(loading_tbl, (st_data_t)ftptr, data);
return (char *)ftptr;
}
- if (warn) {
+
+ if (warn && rb_thread_shield_owned((VALUE)data)) {
VALUE warning = rb_warning_string("loading in progress, circular require considered harmful - %s", ftptr);
rb_backtrace_each(rb_str_append, warning);
rb_warning("%"PRIsVALUE, warning);