Skip to content

NullPointerException due to concurrent Hash access in Psych #3869

Open
@eregon

Description

@eregon

From https://github.com/ruby/setup-ruby/actions/runs/15056771433/job/42324279144?pr=762 (ruby/setup-ruby#762)

Also https://github.com/ruby/setup-ruby/actions/runs/15068319050/job/42358221400 and more

Caused by:
<no message> (java.lang.NullPointerException)
	from org.truffleruby.core.hash.library.PackedHashStoreLibrary.getHashed(PackedHashStoreLibrary.java:78)
	from org.truffleruby.core.hash.library.PackedHashStoreLibrary$LookupPackedEntryNode.getPackedArray(PackedHashStoreLibrary.java:485)
	from org.truffleruby.core.hash.library.PackedHashStoreLibraryFactory$LookupPackedEntryNodeGen.execute(PackedHashStoreLibraryFactory.java:140)
	from org.truffleruby.core.hash.library.PackedHashStoreLibrary.lookupOrDefault(PackedHashStoreLibrary.java:176)
	from org.truffleruby.core.hash.library.PackedHashStoreLibraryGen$HashStoreLibraryExports$Cached.lookupOrDefault(PackedHashStoreLibraryGen.java:443)
	from org.truffleruby.core.hash.HashNodes$GetIndexNode.get(HashNodes.java:209)
	from org.truffleruby.core.hash.HashNodesFactory$GetIndexNodeFactory$GetIndexNodeGen.execute(HashNodesFactory.java:671)
	from org.truffleruby.language.RubyCoreMethodRootNode.execute(RubyCoreMethodRootNode.java:58)
/home/runner/.rubies/truffleruby-head/lib/mri/psych/visitors/visitor.rb:30:in `[]'
	from /home/runner/.rubies/truffleruby-head/lib/mri/psych/visitors/visitor.rb:30:in `visit'
	from /home/runner/.rubies/truffleruby-head/lib/mri/psych/visitors/visitor.rb:6:in `accept'
	from /home/runner/.rubies/truffleruby-head/lib/mri/psych/visitors/to_ruby.rb:35:in `accept'
	from /home/runner/.rubies/truffleruby-head/lib/mri/psych/visitors/to_ruby.rb:346:in `block in revive_hash'
	from <internal:core> core/enumerable.rb:695:in `block in each_slice'
	from <internal:core> core/enumerable.rb:691:in `each'
	from <internal:core> core/enumerable.rb:691:in `each_slice'
	from /home/runner/.rubies/truffleruby-head/lib/mri/psych/visitors/to_ruby.rb:345:in `revive_hash'
	from /home/runner/.rubies/truffleruby-head/lib/mri/psych/visitors/to_ruby.rb:169:in `visit_Psych_Nodes_Mapping'
	from /home/runner/.rubies/truffleruby-head/lib/mri/psych/visitors/visitor.rb:30:in `visit'
	from /home/runner/.rubies/truffleruby-head/lib/mri/psych/visitors/visitor.rb:6:in `accept'
	from /home/runner/.rubies/truffleruby-head/lib/mri/psych/visitors/to_ruby.rb:35:in `accept'
	from /home/runner/.rubies/truffleruby-head/lib/mri/psych/visitors/to_ruby.rb:320:in `visit_Psych_Nodes_Document'
	from /home/runner/.rubies/truffleruby-head/lib/mri/psych/visitors/visitor.rb:30:in `visit'
	from /home/runner/.rubies/truffleruby-head/lib/mri/psych/visitors/visitor.rb:6:in `accept'
	from /home/runner/.rubies/truffleruby-head/lib/mri/psych/visitors/to_ruby.rb:35:in `accept'
	from /home/runner/.rubies/truffleruby-head/lib/mri/psych.rb:334:in `safe_load'
	from /home/runner/.rubies/truffleruby-head/lib/mri/rubygems/safe_yaml.rb:38:in `safe_load'
	from /home/runner/.rubies/truffleruby-head/lib/mri/rubygems/package.rb:562:in `block (2 levels) in read_checksums'
	from /home/runner/.rubies/truffleruby-head/lib/truffle/truffle/cext.rb:1280:in `rb_yield'
	from call.c:103:in `rb_yield'
	from /home/runner/.rubies/truffleruby-head/lib/truffle/truffle/cext.rb:1871:in `rb_ensure'
	from exception.c:115:in `rb_ensure'
	from /home/runner/.rubies/truffleruby-head/lib/truffle/truffle/cext_ruby.rb:39:in `wrap'
	from /home/runner/.rubies/truffleruby-head/lib/mri/rubygems/package.rb:561:in `block in read_checksums'
	from /home/runner/.rubies/truffleruby-head/lib/mri/rubygems/package/tar_reader.rb:95:in `seek'
	from /home/runner/.rubies/truffleruby-head/lib/mri/rubygems/package.rb:560:in `read_checksums'
	from /home/runner/.rubies/truffleruby-head/lib/mri/rubygems/package.rb:620:in `block (2 levels) in verify'
	from /home/runner/.rubies/truffleruby-head/lib/mri/rubygems/package/tar_reader.rb:25:in `new'
	from /home/runner/.rubies/truffleruby-head/lib/mri/rubygems/package.rb:619:in `block in verify'
	from <internal:core> core/io.rb:576:in `open'
	from /home/runner/.rubies/truffleruby-head/lib/mri/rubygems/package/file_source.rb:30:in `with_read_io'
	from /home/runner/.rubies/truffleruby-head/lib/mri/rubygems/package.rb:618:in `verify'
	from /home/runner/.rubies/truffleruby-head/lib/mri/rubygems/package.rb:599:in `spec'
	from /home/runner/.rubies/truffleruby-head/lib/mri/rubygems/installer.rb:275:in `spec'
	from /home/runner/.rubies/truffleruby-head/lib/mri/bundler/rubygems_gem_installer.rb:134:in `spec'
	from /home/runner/.rubies/truffleruby-head/lib/mri/bundler/source/rubygems.rb:186:in `install'
	from /home/runner/.rubies/truffleruby-head/lib/mri/bundler/installer/gem_installer.rb:55:in `install'
	from /home/runner/.rubies/truffleruby-head/lib/mri/bundler/installer/gem_installer.rb:17:in `install_from_spec'
	from /home/runner/.rubies/truffleruby-head/lib/mri/bundler/installer/parallel_installer.rb:133:in `do_install'
	from /home/runner/.rubies/truffleruby-head/lib/mri/bundler/installer/parallel_installer.rb:124:in `block in worker_pool'
	from /home/runner/.rubies/truffleruby-head/lib/mri/bundler/worker.rb:62:in `apply_func'
	from /home/runner/.rubies/truffleruby-head/lib/mri/bundler/worker.rb:57:in `block in process_queue'
	from <internal:core> core/kernel.rb:417:in `loop'
	from /home/runner/.rubies/truffleruby-head/lib/mri/bundler/worker.rb:54:in `process_queue'
	from /home/runner/.rubies/truffleruby-head/lib/mri/bundler/worker.rb:90:in `block (2 levels) in create_threads'

This Hash is accessed concurrently without synchronization:

Hash.new do |hash, klass|
hash[klass] = :"visit_#{klass.name.gsub('::', '_')}"
end.compare_by_identity

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions