[#108552] [Ruby master Bug#18782] Race conditions in autoload when loading the same feature with multiple threads. — "ioquatix (Samuel Williams)" <noreply@...>
Issue #18782 has been reported by ioquatix (Samuel Williams).
11 messages
2022/05/14
[ruby-core:108721] [Ruby master Bug#18608] `require': cannot load such file -- ripper (LoadError) after `make distclean`
From:
"xtkoba (Tee KOBAYASHI)" <noreply@...>
Date:
2022-05-27 04:10:04 UTC
List:
ruby-core #108721
Issue #18608 has been updated by xtkoba (Tee KOBAYASHI).
I guess this is because either `bison` is not installed in the build environment or the environment variable `YACC` is not correctly set. Note that `make distclean` among other things removes `ext/ripper/ripper.c` which requires `YACC` (typically `bison`) to re-generate.
FWIW, in my environment in-place `make distclean` followed by `./configure && make` results in another build failure due to Bison version mismatch with pre-generated `parse.[ch]`, but I suppose that is a separate issue (a workaround is to `rm -f parse.[ch]`).
----------------------------------------
Bug #18608: `require': cannot load such file -- ripper (LoadError) after `make distclean`
https://bugs.ruby-lang.org/issues/18608#change-97773
* Author: brandonrdn (Brandon Riden)
* Status: Open
* Priority: Normal
* ruby -v: ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [x86_64-linux]
* Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN
----------------------------------------
When compiling multiple instances of Ruby (In our case, two separate prefixes), using the following build code causes the 2nd installed Ruby to throw an error on any ruby/irb call.
Changing the code to delete the extracted `ruby-3.1.0` folder and re-extract from the tarball fixes this issue, so I believe it's something in the `make distclean` that's causing issues. This was not an issue for ruby 2.6.3 or 2.6.7, just on 3.0+ versions.
Build code:
```
# Build Ruby
RUN set -e ; \
. /etc/profile.d/ccache.sh ; \
wget -q https://cache.ruby-lang.org/pub/ruby/${RUBY_VERSION%.*}/ruby-${RUBY_VERSION}.tar.gz ; \
tar zxf ruby-${RUBY_VERSION}.tar.gz ; \
rm -f ruby-${RUBY_VERSION}.tar.gz ; \
pushd ruby-${RUBY_VERSION} ; \
type -p gcc ; \
for prefix in /usr/local /opt/vendored_ruby ; do \
./configure --prefix=$prefix --with-compress-debug-sections=no --disable-install-doc ; \
make ; \
make install ; \
make distclean ; \
done ; \
popd ; \
ccache --show-stats ; \
rm -rf ruby-${RUBY_VERSION} /root/.ccache
```
Error:
```
<internal:/opt/vendored_ruby/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require': cannot load such file -- ripper (LoadError)
from <internal:/opt/vendored_ruby/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from /opt/vendored_ruby/lib/ruby/3.1.0/irb.rb:12:in `<top (required)>'
from <internal:/opt/vendored_ruby/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from <internal:/opt/vendored_ruby/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from /opt/vendored_ruby/lib/ruby/gems/3.1.0/gems/irb-1.4.1/exe/irb:9:in `<top (required)>'
from /opt/vendored_ruby/bin/irb:25:in `load'
from /opt/vendored_ruby/bin/irb:25:in `<main>'
[root@cc75157e1b69 /]# /usr/local/bin/irb
irb(main):001:0>
```
This error pops up on any reference to ruby or irb, including the base commands.
Steps to reproduce:
* Compile/make/make install Ruby 3.0+ with the 1st prefix
* Run `make distclean`
* Compile/make/make install Ruby 3.0+ with the 2nd prefix
* run the `irb` and `ruby` commands in both paths.
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>