diff --git a/CHANGELOG.md b/CHANGELOG.md index 07d3121668e..c61ac8dde62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#4494](https://github.com/open-telemetry/opentelemetry-python/pull/4494)) - Improve CI by cancelling stale runs and setting timeouts ([#4498](https://github.com/open-telemetry/opentelemetry-python/pull/4498)) +- opentelemetry-exporter-otlp-proto-grpc: fix shutdown race condition + ([#4490](https://github.com/open-telemetry/opentelemetry-python/pull/4490)) ## Version 1.31.0/0.52b0 (2025-03-12) diff --git a/exporter/opentelemetry-exporter-otlp-proto-grpc/src/opentelemetry/exporter/otlp/proto/grpc/exporter.py b/exporter/opentelemetry-exporter-otlp-proto-grpc/src/opentelemetry/exporter/otlp/proto/grpc/exporter.py index 4be75c5335e..4ceeea22fb7 100644 --- a/exporter/opentelemetry-exporter-otlp-proto-grpc/src/opentelemetry/exporter/otlp/proto/grpc/exporter.py +++ b/exporter/opentelemetry-exporter-otlp-proto-grpc/src/opentelemetry/exporter/otlp/proto/grpc/exporter.py @@ -356,9 +356,10 @@ def shutdown(self, timeout_millis: float = 30_000, **kwargs) -> None: if self._shutdown: logger.warning("Exporter already shutdown, ignoring call") return + # set shutdown flag to prevent new exports + self._shutdown = True # wait for the last export if any self._export_lock.acquire(timeout=timeout_millis / 1e3) - self._shutdown = True self._channel.close() self._export_lock.release()