-
Notifications
You must be signed in to change notification settings - Fork 509
Description
I have install opentelemetry-cpp and using it in my project. Everything seems to work fine as long as I don't include the headers below:
#include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h"
#include "opentelemetry/exporters/otlp/otlp_http_exporter_options.h"
#include "opentelemetry/exporters/otlp/otlp_http_log_record_exporter_factory.h"
#include "opentelemetry/exporters/otlp/otlp_http_log_record_exporter_options.h"
The moment I do that, anytime I close my application by stopping VS2022, it is all good. However, when I close my application via the close button, I get memory leaks
My init method:
//For export to OTLP exporter
opentelemetry::exporter::otlp::OtlpHttpExporterOptions opts;
opts.url = endpoint;
auto otlpExporter = opentelemetry::exporter::otlp::OtlpHttpExporterFactory::Create( opts );
auto otlpProcessor = trace_sdk::SimpleSpanProcessorFactory::Create( std::move( otlpExporter ) );
m_tracerProvider = trace_sdk::TracerProviderFactory::Create( std::move( otlpProcessor ) );
// Set the global trace provider
std::shared_ptropentelemetry::trace::TracerProvider api_provider = m_tracerProvider;
trace_api::Provider::SetTracerProvider( api_provider );
My instance and get tracer method:
OpenTelemetryClient& OpenTelemetryClient::getInstance()
{
static OpenTelemetryClient instance;
return instance;
}
opentelemetry::nostd::shared_ptropentelemetry::trace::Tracer OpenTelemetryClient::get_tracer()
{
return trace_api::Provider::GetTracerProvider()->GetTracer( "client-tracer: " + GetPcUserName() );
}
My cleanup method:
void OpenTelemetryClient::CleanupTracer()
{
if( m_tracerProvider )
{
// ADDED: Flush any pending spans before shutdown
m_tracerProvider->ForceFlush();
// ADDED: Properly shutdown the provider
m_tracerProvider->Shutdown();
}
// Clear the global API provider
std::shared_ptr<opentelemetry::trace::TracerProvider> none;
trace_api::Provider::SetTracerProvider( none );
// ADDED: Release our SDK provider reference
m_tracerProvider.reset();
}
What is the expected behavior?
No memory leaks
What is the actual behavior?
Detected memory leaks!
Dumping objects ->
{7532} normal block at 0x0000017E6E0C99E0, 16 bytes long.
Data: <à n~ ÍÍÍÍ> E0 99 0C 6E 7E 01 00 00 00 00 00 01 CD CD CD CD
{7530} normal block at 0x0000017E6E0CA1B0, 16 bytes long.
Data: <°¡ n~ ÍÍÍÍ> B0 A1 0C 6E 7E 01 00 00 00 00 00 01 CD CD CD CD
{7528} normal block at 0x0000017E6E0CA0C0, 16 bytes long.
Data: <À n~ ÍÍÍÍ> C0 A0 0C 6E 7E 01 00 00 00 00 00 01 CD CD CD CD
Object dump complete.
I tried searching everywhere for a solution but can't seem to find any until now.