Oh yeah, thanks. There's even a helpful comment for it. I think changing `rb_gc_update_tbl_refs` to only move values probably makes sense. We could add something like `rb_mark_hash_nopin_values` where it marks values for moving but pins ...luke-gru (Luke Gruber)
Looking into this further, it looks like `gc_update_table_refs` is only used once internally, with the finalizer_table. It looks to me like it's used wrong there because the key (finalized object) is not pinned so can be moved, but the s...luke-gru (Luke Gruber)
Nice catch! I think this would only be a problem if the key was a number that was also a valid pointer into the Ruby heap and it happened to point to a T_MOVED object. If it's another pointer from malloc or xmalloc it shouldn't be an iss...luke-gru (Luke Gruber)
A note to whoever backports this (which could be me, I'm just waiting ~ 1 week and checking various CIs after the merge): https://github.com/ruby/ruby/pull/16362 should be backported as well, they are really 1 fix in 2 separate commit...luke-gru (Luke Gruber)
I'm getting a segfault when running your minimal reproduction script on my Macbook Pro (`Darwin Mac 25.2.0 Darwin Kernel Version 25.2.0 (Apple Silicon)`). I get the segfault when compiling under all 3 `GETADDRINFO_IMPL` implementations ...luke-gru (Luke Gruber)
Thank you for the nice reproduction! We have a fix coming, and it will probably be backported to 3.3, 3.4 and 4.0. The fix is at https://github.com/ruby/ruby/pull/16307.luke-gru (Luke Gruber)
I wasn't aware of those old issues. I'll take a look, thanks! I reverted the commit because of issues with a `Monitor` test in CI. I thought it was related to this change, but the test kept failing even after the revert. It turns out it...luke-gru (Luke Gruber)
I'm confused about what should happen. Shouldn't it return roughly after 1 second instead of 10 seconds? I'll look into the sleep issue with `RUBY_MN_THREADS=1`, but I can't reproduce the deadlock or segfault with a more recent commit (a...luke-gru (Luke Gruber)