Skip to content

Commit 2f95832

Browse files
committed
fix: Fix stack-overflow inducing infinite feedback loop when calling tracing::event! after SdkLoggerProvider::shutdown
1 parent 6f75c58 commit 2f95832

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
use opentelemetry_appender_tracing::layer;
2+
use opentelemetry_sdk::logs::SdkLoggerProvider;
3+
use tracing::info;
4+
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
5+
6+
#[test]
7+
fn test_no_stack_overflow_when_event_is_emitted_after_shutdown() {
8+
let exporter = opentelemetry_stdout::LogExporter::default();
9+
let provider: SdkLoggerProvider = SdkLoggerProvider::builder()
10+
.with_batch_exporter(exporter)
11+
.build();
12+
13+
let otel_layer = layer::OpenTelemetryTracingBridge::new(&provider);
14+
15+
tracing_subscriber::registry().with(otel_layer).init();
16+
17+
provider.shutdown().unwrap();
18+
19+
info!("Don't crash")
20+
}

opentelemetry-sdk/src/logs/logger.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ impl opentelemetry::logs::Logger for SdkLogger {
3333

3434
/// Emit a `LogRecord`.
3535
fn emit(&self, mut record: Self::LogRecord) {
36-
if Context::is_current_telemetry_suppressed() {
36+
if Context::is_current_telemetry_suppressed() || self.provider.is_shutdown() {
3737
return;
3838
}
3939
let provider = &self.provider;

opentelemetry-sdk/src/logs/logger_provider.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,10 @@ impl SdkLoggerProvider {
129129
pub fn shutdown(&self) -> OTelSdkResult {
130130
self.shutdown_with_timeout(Duration::from_secs(5))
131131
}
132+
133+
pub(crate) fn is_shutdown(&self) -> bool {
134+
self.inner.is_shutdown.load(Ordering::SeqCst)
135+
}
132136
}
133137

134138
#[derive(Debug)]

0 commit comments

Comments
 (0)