SWDEV-388249: Memory leak fix

Change-Id: I68c62ee42e6d37fb85a1a8aa0d7a2cbda6431a8b


[ROCm/rocprofiler commit: 40bfdcade0]
This commit is contained in:
gobhardw
2023-04-25 12:12:43 +05:30
والد 7cf679e483
کامیت fe7cbccdfa
2فایلهای تغییر یافته به همراه18 افزوده شده و 11 حذف شده
@@ -323,9 +323,8 @@ class file_plugin_t {
profiler_record->kernel_id, &name_length));
// Taken from rocprofiler: The size hasn't changed in recent past
static const uint32_t lds_block_size = 128 * 4;
const char* kernel_name_c;
const char* kernel_name_c = nullptr;
if (name_length > 1) {
kernel_name_c = static_cast<const char*>(malloc(name_length * sizeof(char)));
CHECK_ROCPROFILER(rocprofiler_query_kernel_info(ROCPROFILER_KERNEL_NAME,
profiler_record->kernel_id, &kernel_name_c));
}
@@ -390,6 +389,9 @@ class file_plugin_t {
}
}
}
if (kernel_name_c) {
free(const_cast<char*>(kernel_name_c));
}
}
void FlushPCSamplingRecord(const rocprofiler_record_pc_sample_t* pc_sampling_record) {
@@ -256,7 +256,7 @@ template <activity_domain_t domain> struct ApiTracer {
assert(trace_data != nullptr);
rocprofiler_record_tracer_t record{};
record.header = rocprofiler_record_header_t{ROCPROFILER_TRACER_RECORD,
rocprofiler_record_id_t{record_id}};
rocprofiler_record_id_t{record_id}};
record.domain = domain;
record.operation_id = rocprofiler_tracer_operation_id_t{operation_id};
record.correlation_id =
@@ -270,9 +270,10 @@ template <activity_domain_t domain> struct ApiTracer {
if (auto external_id = ExternalCorrelationId()) {
rocprofiler_record_tracer_t ext_record{};
ext_record.header = rocprofiler_record_header_t{ROCPROFILER_TRACER_RECORD,
rocprofiler_record_id_t{record_id}};
rocprofiler_record_id_t{record_id}};
ext_record.domain = ACTIVITY_DOMAIN_EXT_API;
ext_record.operation_id = rocprofiler_tracer_operation_id_t{ACTIVITY_EXT_OP_EXTERN_ID};
ext_record.operation_id =
rocprofiler_tracer_operation_id_t{ACTIVITY_EXT_OP_EXTERN_ID};
ext_record.correlation_id =
rocprofiler_tracer_activity_correlation_id_t{record.correlation_id};
ext_record.external_id = rocprofiler_tracer_external_id_t{*external_id};
@@ -389,8 +390,8 @@ int TracerCallback(activity_domain_t domain, uint32_t operation_id, void* data)
->GetBufferLock());
record_id = rocmtools::GetROCMToolObj()->GetUniqueRecordId();
rocprofiler_record_tracer_t rocprofiler_record{};
rocprofiler_record.header = rocprofiler_record_header_t{ROCPROFILER_TRACER_RECORD,
rocprofiler_record_id_t{record_id}};
rocprofiler_record.header = rocprofiler_record_header_t{
ROCPROFILER_TRACER_RECORD, rocprofiler_record_id_t{record_id}};
rocprofiler_record.domain = domain;
rocprofiler_record.external_id = rocprofiler_tracer_external_id_t{};
rocprofiler_record.operation_id = rocprofiler_tracer_operation_id_t{record->kind};
@@ -413,8 +414,10 @@ int TracerCallback(activity_domain_t domain, uint32_t operation_id, void* data)
->AddRecord(rocprofiler_record, rocprofiler_record.api_data_handle.handle,
rocprofiler_record.api_data_handle.size,
[initial_handle](auto& rocprofiler_record, const void* data) {
if (rocprofiler_record.api_data_handle.handle==initial_handle)
if (rocprofiler_record.api_data_handle.handle == initial_handle &&
data != initial_handle) {
free(initial_handle);
}
rocprofiler_record.api_data_handle.handle =
static_cast<const char*>(data);
});
@@ -455,8 +458,8 @@ int TracerCallback(activity_domain_t domain, uint32_t operation_id, void* data)
->GetBufferLock());
record_id = rocmtools::GetROCMToolObj()->GetUniqueRecordId();
rocprofiler_record_tracer_t rocprofiler_record{};
rocprofiler_record.header = rocprofiler_record_header_t{ROCPROFILER_TRACER_RECORD,
rocprofiler_record_id_t{record_id}};
rocprofiler_record.header = rocprofiler_record_header_t{
ROCPROFILER_TRACER_RECORD, rocprofiler_record_id_t{record_id}};
rocprofiler_record.domain = domain;
rocprofiler_record.external_id = rocprofiler_tracer_external_id_t{0};
rocprofiler_record.operation_id = rocprofiler_tracer_operation_id_t{record->op};
@@ -479,8 +482,10 @@ int TracerCallback(activity_domain_t domain, uint32_t operation_id, void* data)
->AddRecord(rocprofiler_record, rocprofiler_record.api_data_handle.handle,
rocprofiler_record.api_data_handle.size,
[initial_handle](auto& rocprofiler_record, const void* data) {
if (rocprofiler_record.api_data_handle.handle==initial_handle)
if (rocprofiler_record.api_data_handle.handle == initial_handle &&
data != initial_handle) {
free(initial_handle);
}
rocprofiler_record.api_data_handle.handle =
static_cast<const char*>(data);
});