Open
Description
I run into this occasionally attempting to run Rails 7 with Puma on TruffleRuby 22.3. It kills the server.
Caused by: java.lang.UnsupportedOperationException: Thread-safety bug: the object is already shared. This means another thread marked the object as shared concurrently.
at org.truffleruby.language.objects.shared.ShareObjectNode.createSharedShape(ShareObjectNode.java:129)
at org.truffleruby.language.objects.shared.ShareObjectNodeGen.executeAndSpecialize(ShareObjectNodeGen.java:99)
at org.truffleruby.language.objects.shared.ShareObjectNodeGen.executeShare(ShareObjectNodeGen.java:69)
at org.truffleruby.language.objects.shared.WriteBarrierNode.writeBarrierCached(WriteBarrierNode.java:69)
at org.truffleruby.language.objects.shared.WriteBarrierNodeGen.executeWriteBarrier(WriteBarrierNodeGen.java:80)
at org.truffleruby.core.array.library.ObjectArrayStore$ShareElements.shareElements(ObjectArrayStore.java:102)
at org.truffleruby.core.array.library.ObjectArrayStoreGen$ArrayStoreLibraryExports$Cached.shareElements(ObjectArrayStoreGen.java:90)
at org.truffleruby.core.array.library.ObjectArrayStore.makeShared(ObjectArrayStore.java:87)
at org.truffleruby.core.array.library.ObjectArrayStoreGen$ArrayStoreLibraryExports$Cached.makeShared(ObjectArrayStoreGen.java:333)
at org.truffleruby.language.objects.shared.ShareInternalFieldsNode.shareArray(ShareInternalFieldsNode.java:50)
at org.truffleruby.language.objects.shared.ShareInternalFieldsNodeGen.executeShare(ShareInternalFieldsNodeGen.java:46)
at org.truffleruby.language.objects.shared.ShareObjectNode.shareCached(ShareObjectNode.java:74)
at org.truffleruby.language.objects.shared.ShareObjectNodeGen.executeShare(ShareObjectNodeGen.java:51)
at org.truffleruby.language.objects.shared.WriteBarrierNode.writeBarrierCached(WriteBarrierNode.java:69)
at org.truffleruby.language.objects.shared.WriteBarrierNodeGen.executeWriteBarrier(WriteBarrierNodeGen.java:80)
at org.truffleruby.language.objects.shared.PropagateSharingNode.propagateShared(PropagateSharingNode.java:39)
at org.truffleruby.language.objects.shared.PropagateSharingNodeGen.executePropagate(PropagateSharingNodeGen.java:39)
at org.truffleruby.core.hash.library.PackedHashStoreLibrary$Set.setFirst(PackedHashStoreLibrary.java:180)
at org.truffleruby.core.hash.library.PackedHashStoreLibraryGen$HashStoreLibraryExports$Cached.set(PackedHashStoreLibraryGen.java:102)
at org.truffleruby.core.hash.library.HashStoreLibraryGen$CachedDispatch.set(HashStoreLibraryGen.java:999)
at org.truffleruby.core.hash.library.EmptyHashStore.set(EmptyHashStore.java:49)
at org.truffleruby.core.hash.library.EmptyHashStoreGen$HashStoreLibraryExports$Cached.set(EmptyHashStoreGen.java:86)
at org.truffleruby.core.hash.HashNodes$SetIndexNode.set(HashNodes.java:239)
at org.truffleruby.core.hash.HashNodesFactory$SetIndexNodeFactory$SetIndexNodeGen.execute(HashNodesFactory.java:981)
at org.truffleruby.language.RubyCoreMethodRootNode.execute(RubyCoreMethodRootNode.java:48)
The app is a trivial generated "blog" scaffold app with Puma configured for 32 threads and siege doing 32 connections. If I drive the app with a few requests before starting benchmarking, it seems to fail less often.