diff --git a/opentelemetry-sdk/src/trace/provider.rs b/opentelemetry-sdk/src/trace/provider.rs index 0c8bf64048..c75b0921ce 100644 --- a/opentelemetry-sdk/src/trace/provider.rs +++ b/opentelemetry-sdk/src/trace/provider.rs @@ -135,8 +135,12 @@ impl opentelemetry_api::trace::TracerProvider for TracerProvider { } else { name }; - let instrumentation_lib = - InstrumentationLibrary::new(component_name, version, schema_url, attributes); + let instrumentation_lib = Arc::new(InstrumentationLibrary::new( + component_name, + version, + schema_url, + attributes, + )); Tracer::new(instrumentation_lib, Arc::downgrade(&self.inner)) } diff --git a/opentelemetry-sdk/src/trace/tracer.rs b/opentelemetry-sdk/src/trace/tracer.rs index 830d1b0436..c5461fd0e1 100644 --- a/opentelemetry-sdk/src/trace/tracer.rs +++ b/opentelemetry-sdk/src/trace/tracer.rs @@ -22,12 +22,12 @@ use opentelemetry_api::trace::{ }; use opentelemetry_api::{Context, Key, KeyValue, OrderMap, Value}; use std::fmt; -use std::sync::Weak; +use std::sync::{Arc, Weak}; /// `Tracer` implementation to create and manage spans #[derive(Clone)] pub struct Tracer { - instrumentation_lib: InstrumentationLibrary, + instrumentation_lib: Arc, provider: Weak, } @@ -45,7 +45,7 @@ impl fmt::Debug for Tracer { impl Tracer { /// Create a new tracer (used internally by `TracerProvider`s). pub(crate) fn new( - instrumentation_lib: InstrumentationLibrary, + instrumentation_lib: Arc, provider: Weak, ) -> Self { Tracer {