Skip to content

Commit 33b5e9b

Browse files
authored
Fix metric collections during PeriodicReader shutdown (#1375)
1 parent c06c04b commit 33b5e9b

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

opentelemetry-sdk/CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
`SpanData` now stores `events` as `SpanEvents` instead of `EvictedQueue` where
2323
`SpanEvents` is a struct with a `Vec` of events and `dropped_count`.
2424

25+
- [#1375](https://github.com/open-telemetry/opentelemetry-rust/pull/1375/) Fix metric collections during PeriodicReader shutdown
26+
2527
## v0.21.1
2628

2729
### Fixed

opentelemetry-sdk/src/metrics/periodic_reader.rs

+8-5
Original file line numberDiff line numberDiff line change
@@ -374,18 +374,21 @@ impl MetricReader for PeriodicReader {
374374
if inner.is_shutdown {
375375
return Err(MetricsError::Other("reader is already shut down".into()));
376376
}
377-
inner.is_shutdown = true;
378377

379378
let (sender, receiver) = oneshot::channel();
380379
inner
381380
.message_sender
382381
.try_send(Message::Shutdown(sender))
383382
.map_err(|e| MetricsError::Other(e.to_string()))?;
384-
385383
drop(inner); // don't hold lock when blocking on future
386384

387-
futures_executor::block_on(receiver)
388-
.map_err(|err| MetricsError::Other(err.to_string()))
389-
.and_then(|res| res)
385+
let shutdown_result = futures_executor::block_on(receiver)
386+
.map_err(|err| MetricsError::Other(err.to_string()))?;
387+
388+
// Acquire the lock again to set the shutdown flag
389+
let mut inner = self.inner.lock()?;
390+
inner.is_shutdown = true;
391+
392+
shutdown_result
390393
}
391394
}

0 commit comments

Comments
 (0)