Skip to content

Conversation

@supercaracal
Copy link
Member

@supercaracal supercaracal commented Sep 23, 2025

Although I'm not familiar with internals of JRuby and TruffleRuby, they need strict implementation for concurrency because they have none of the global interpreter lock. I think they provide us some signs of potentially bugs for our multi-threading implementation.

[engine] WARNING: 3 threads did not reach the synchronous ThreadLocalAction kill other threads for shutdown 57b8d3a7 in 60 seconds. When using virtual threads this may be due to the issue that once more than Runtime.availableProcessors() virtual threads are pinned and waiting for each other, no virtual threads can progress (JDK-8334304). Cancelling this ThreadLocalAction to unblock. Use --engine.SynchronousThreadLocalActionPrintStackTraces=true to print thread stacktraces.
truffleruby: an exception escaped out of the interpreter - this is an implementation bug
org.graalvm.polyglot.PolyglotException: java.util.concurrent.CancellationException
	at org.graalvm.truffle/com.oracle.truffle.api.impl.ThreadLocalHandshake$Handshake.get(ThreadLocalHandshake.java:502)
	at org.graalvm.truffle/com.oracle.truffle.api.impl.ThreadLocalHandshake$Handshake.get(ThreadLocalHandshake.java:295)
	at org.graalvm.ruby/org.truffleruby.language.SafepointManager.lambda$pauseAllThreadsAndExecute$0(SafepointManager.java:57)
	at org.graalvm.truffle/com.oracle.truffle.api.impl.ThreadLocalHandshake$TruffleSafepointImpl.setBlockedBoundary(ThreadLocalHandshake.java:881)
	at org.graalvm.truffle/com.oracle.truffle.api.impl.ThreadLocalHandshake$TruffleSafepointImpl.setBlocked(ThreadLocalHandshake.java:852)
	at org.graalvm.truffle/com.oracle.truffle.api.TruffleSafepoint.setBlockedThreadInterruptible(TruffleSafepoint.java:339)
	at org.graalvm.ruby/org.truffleruby.language.SafepointManager.pauseAllThreadsAndExecute(SafepointManager.java:55)
	at org.graalvm.ruby/org.truffleruby.core.thread.ThreadManager.doKillOtherThreads(ThreadManager.java:636)
	at org.graalvm.ruby/org.truffleruby.core.thread.ThreadManager.killAndWaitOtherThreads(ThreadManager.java:613)
	at org.graalvm.ruby/org.truffleruby.RubyContext.finalizeContext(RubyContext.java:488)
	at org.graalvm.ruby/org.truffleruby.RubyLanguage.finalizeContext(RubyLanguage.java:572)
	at org.graalvm.ruby/org.truffleruby.RubyLanguage.finalizeContext(RubyLanguage.java:156)
	at org.graalvm.truffle/com.oracle.truffle.api.LanguageAccessor$LanguageImpl.finalizeContext(LanguageAccessor.java:333)
	at org.graalvm.truffle/com.oracle.truffle.polyglot.PolyglotLanguageContext.finalizeContext(PolyglotLanguageContext.java:403)
	at org.graalvm.truffle/com.oracle.truffle.polyglot.PolyglotContextImpl.finalizeContext(PolyglotContextImpl.java:3468)
	at org.graalvm.truffle/com.oracle.truffle.polyglot.PolyglotContextImpl.finishClose(PolyglotContextImpl.java:2979)
	at org.graalvm.truffle/com.oracle.truffle.polyglot.PolyglotContextImpl.closeImpl(PolyglotContextImpl.java:2887)
	at org.graalvm.truffle/com.oracle.truffle.polyglot.PolyglotContextImpl.closeAndMaybeWait(PolyglotContextImpl.java:2039)
	at org.graalvm.truffle/com.oracle.truffle.polyglot.PolyglotContextImpl.close(PolyglotContextImpl.java:1972)
	at org.graalvm.truffle/com.oracle.truffle.polyglot.PolyglotContextDispatch.close(PolyglotContextDispatch.java:72)
	at org.graalvm.polyglot/org.graalvm.polyglot.Context.close(Context.java:887)
	at org.graalvm.polyglot/org.graalvm.polyglot.Context.close(Context.java:914)
	at org.graalvm.ruby.launcher/org.truffleruby.launcher.RubyLauncher.runContext(RubyLauncher.java:365)
	at org.graalvm.ruby.launcher/org.truffleruby.launcher.RubyLauncher.runRubyMain(RubyLauncher.java:296)
	at org.graalvm.ruby.launcher/org.truffleruby.launcher.RubyLauncher.launch(RubyLauncher.java:171)
	at org.graalvm.launcher/org.graalvm.launcher.AbstractLanguageLauncher.launch(AbstractLanguageLauncher.java:305)
	at org.graalvm.launcher/org.graalvm.launcher.AbstractLanguageLauncher.launch(AbstractLanguageLauncher.java:125)
	at org.graalvm.launcher/org.graalvm.launcher.AbstractLanguageLauncher.runLauncher(AbstractLanguageLauncher.java:173)
	Suppressed: Attached Guest Language Frames (0)
Internal GraalVM error, please report at https://github.com/oracle/graal/issues/.

@supercaracal supercaracal marked this pull request as ready for review September 23, 2025 03:24
@supercaracal supercaracal merged commit 359d5fd into redis-rb:master Sep 23, 2025
33 checks passed
@supercaracal supercaracal deleted the fix-interruption-handling-for-workers-again branch September 23, 2025 03:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant