diff --git a/CHANGELOG.md b/CHANGELOG.md index ff1597652b1..8ea323e0ad5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## Unreleased + +### Fixes + +- Fix deadlock in `SentryContextStorage.root()` with virtual threads and OpenTelemetry agent ([#5234](https://github.com/getsentry/sentry-java/pull/5234)) + ## 8.37.0 ### Fixes diff --git a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/SentryContextStorage.java b/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/SentryContextStorage.java index 5a916a9ecab..c97e40ea62d 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/SentryContextStorage.java +++ b/sentry-opentelemetry/sentry-opentelemetry-bootstrap/src/main/java/io/sentry/opentelemetry/SentryContextStorage.java @@ -41,6 +41,9 @@ public Context current() { @Override public Context root() { - return SentryContextWrapper.wrap(ContextStorage.super.root()); + // Don't wrap() here — it triggers scope.clone() which acquires locks. Under virtual + // threads, lock.unlock() can re-enter here via OpenTelemetry executor instrumentation, causing + // a deadlock. + return ContextStorage.super.root(); } }